洛谷 P3112 后卫马克Guard Mark
->题目链接
题解:
贪心+模拟
#include<algorithm> #include<iostream> #include<cstring> #include<cstdio> using namespace std; const int inf=1e9+7; int n,H,h[25],w[25],s[25],f[(1<<20)+1],g[(1<<20)+1],ans=-1; int main() { scanf("%d%d",&n,&H); for(int i=0; i<=n-1; i++) scanf("%d%d%d",&h[i],&w[i],&s[i]); memset(f,-1,sizeof(f)); f[0]=inf; for(int i=0; i<=(1<<n)-1; i++) for(int j=0; j<=n-1; j++) if(f[i]>=w[j]) { if((i>>j)&1) continue; int k=i^(1<<j); f[k]=max(f[k],min(f[i]-w[j],s[j])); g[k]=g[i]+h[j]; if(g[k]>=H) ans=max(ans,f[k]); } if(ans<0) printf("Mark is too tall"); else printf("%d",ans); return 0; }
拥抱过后,我的双手应该放在哪里