求助
  • 板块P1156 垃圾陷阱
  • 楼主Xor273
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/7/12 20:12
  • 上次更新2023/10/27 20:47:29
查看原帖
求助
531653
Xor273楼主2022/7/12 20:12
#include<bits/stdc++.h>
using namespace std;

int d,g,ans1,ans2,f[105][3005];

struct laji{
	int t,F,h;
}lj[105];

bool cmp(const laji x,const laji y)
{
	return x.t<y.t;
}

int main()
{
	for(int j=0;j<=100;j++)
	for(int i=0;i<=3000;i++)f[j][i]=-900;
	cin>>d>>g;
	f[0][10]=0;
	for(int i=1;i<=g;i++)
	{
		cin>>lj[i].t>>lj[i].F>>lj[i].h;
		ans2+=lj[i].F;
	}
	sort(lj+1,lj+1+g,cmp);
	for(int i=1;i<=g;i++)
	{
		for(int j=3500;j>=lj[i].t;j--)
		{
			f[i][j]=max(f[i][j],f[i-1][j]+lj[i].h);//use
			if(j>lj[i].F)
			f[i][j]=max(f[i][j],f[i-1][j-lj[i].F]);//eat
			if(f[i][j]>=d){ans1=lj[i].t;break;}
		}
		if(ans1)break;
	}
	if(ans1)cout<<ans1;
	else cout<<10+ans2;
	return 0;
}

f[i][j]是到第i个物品生命值为j时的高度最大值

2022/7/12 20:12
加载中...