#include<bits/stdc++.h>
using namespace std;
int hi,n,ai=1,dp[40010];
struct node
{
int h,a;
}s[2810];
bool cmp(node x,node y)
{
return x.a<y.a;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int k,e=2,c;
scanf("%d%d%d",&s[ai].h,&s[ai].a,&c);
k=s[ai].h;
c--;
if(hi<s[ai].a)
hi=s[ai].a;
while(e<=c)
{
s[++ai].h=s[ai-1].h*2;
s[ai].a=s[ai-1].a;
c-=e;
e<<=1;
}
if(c)
{
s[++ai].h=k*c;
s[ai].a=s[ai-1].a;
}
ai++;
}
ai--;
sort(s+1,s+1+ai,cmp);
for(int i=1;i<=ai;i++)
for(int j=s[i].a;j>=s[i].h;j--)
dp[j]=max(dp[j],dp[j-s[i].h]+s[i].h);
int ans=0;
for(int i=1;i<=hi;i++)
ans=max(ans,dp[i]);
printf("%d",ans);
return 0;
}
这是原样例:
输入:320 1000 1060 109 150 161
输出:360
输入手动修改后:
3
20 1000 10
60 109 1
50 161 3
代码输出:360