1. 程式人生 > >洛谷 P3112 後衛馬克 —— 狀壓DP

洛谷 P3112 後衛馬克 —— 狀壓DP

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