#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