本地过,37分求助
查看原帖
本地过,37分求助
605945
luo_xiaoran楼主2023/2/14 12:56
#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

2023/2/14 12:56
加载中...