#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; struct node { int h,a,c; }k[410]; int used[400000]; int dp[400000]; bool cmp(node x,node y) { return x.a<y.a; } int main() { int n,ans; while(scanf("%d",&n)!=EOF) { for(int i=0;i<n;i++) scanf("%d%d%d",&k[i].h,&k[i].a,&k[i].c); sort(k,k+n,cmp); memset(dp,0,sizeof(dp)); dp[0]=1; ans=0; for(int i=0;i<n;i++) { memset(used,0,sizeof(used)); for(int j=k[i].h;j<=k[i].a;j++) { if(!dp[j] && dp[j-k[i].h] && used[j-k[i].h]<k[i].c) { dp[j]=1; used[j]=used[j-k[i].h]+1; //计算所用石头个数 if(j>ans) ans=j; } } } printf("%d\n",ans); } return 0; }
poj 2392 Space Elevator (多重背包)
原文:http://blog.csdn.net/u012841845/article/details/18563439