看了题解做的,自己做还是很困难的
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct hehe
{
int h;
int hmax;
int n;
}a[4001];
bool cmp(hehe a,hehe b)
{
return a.hmax<b.hmax;
}
int sum[40002];
int dp[40002];
int main()
{
int t;
while(cin>>t)
{
memset(dp,0,sizeof(dp));
int i,j,k;
dp[0]=1;
for(i=1;i<=t;i++)
cin>>a[i].h>>a[i].hmax>>a[i].n;
int ans=0;
sort(a+1,a+t+1,cmp); //一开始忘记加一,然后就没有然后了
for(i=1;i<=t;i++)
{
memset(sum,0,sizeof(sum));
for(j=a[i].h;j<=a[i].hmax;j++)
{
if(!dp[j]&&sum[j-a[i].h]<a[i].n&&dp[j-a[i].h])//直接多重背包,不用二进制优化
{
dp[j]=1;
sum[j]=sum[j-a[i].h]+1;
if(j>ans)
ans=j;
}
}
}
cout<<ans<<endl;
}
return 0;
}