0
点赞
收藏
分享

微信扫一扫

ICPC H题 二维dp背包问题 代码+详细注释

萧萧雨潇潇 2022-04-27 阅读 51
c++
#include<bits/stdc++.h>
using namespace std;
int n,h,s;
struct Node{
	int h,s,w;
}g[1005];
long long dp[305][305];  //注意开long long 忘开导致此题被罚时一次 
int main()
{
	cin>>n>>h>>s;
	for(int i=0;i<n;i++)
	{
		cin>>g[i].h>>g[i].s>>g[i].w;
	}
	for(int i=0;i<n;i++)
	for(int j=h;j>g[i].h;j--) //体力不够就死了 
	for(int k=s;k>=0;k--)//耐力不够 体力来凑 
	{
		int temp=k-g[i].s;
		if(temp>=0)
		dp[j][k]=max(dp[j][k],dp[j-g[i].h][temp]+g[i].w);
		else
		if(j-g[i].h+temp>0)//先保证死不了 
		dp[j][k]=max(dp[j][k],dp[j-g[i].h+temp][0]+g[i].w);
	}
	cout<<dp[h][s];
}
举报

相关推荐

0 条评论