洛谷 P3112 後衛馬克 —— 狀壓DP
阿新 • • 發佈:2018-07-30
clu else ostream col string pre tps ace cstring
題目:https://www.luogu.org/problemnew/show/P3112
狀壓DP...轉移不錯。
代碼如下:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; ll const maxn=(1<<20),inf=1e18; ll n,H,h[25],w[25],s[25],f[maxn],mx,ans=-inf; int main() { scanf("%lld%lld",&n,&H); mx=(1<<n)-1; for(int i=1;i<=n;i++)scanf("%lld%lld%lld",&h[i],&w[i],&s[i]); f[0]=inf;//下面取min for(int i=1;i<=mx;i++) { ll tmp=0; f[i]=-inf; for(int j=1;j<=n;j++) if((1<<(j-1))&i) { tmp+=h[j]; f[i]=max(f[i],min(f[i^(1<<(j-1))]-w[j],s[j])); } if(tmp>=H&&f[i]>0)ans=max(ans,f[i]); } if(ans<0)printf("Mark is too tall\n"); else printf("%lld\n",ans); return 0; }
洛谷 P3112 後衛馬克 —— 狀壓DP