背包这样写,30分求助
  • 板块P1802 5 倍经验日
  • 楼主Rhss
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/8/8 10:27
  • 上次更新2023/10/27 16:30:35
查看原帖
背包这样写,30分求助
684890
Rhss楼主2022/8/8 10:27
#include <bits/stdc++.h>
#define nx 1100
using namespace std;
typedef long long ll;
struct node{
	int lose;
	int win;
	int use;
};
ll n,m;
node a[nx];
ll dp[nx][nx];
//dp[i][j]表示前i个人,在用j个药物的情况下,所能所得的最大经验
int main(){
	cin>>n>>m;
	fill(dp[0],dp[0]+n*m,0);
	for(ll i = 1;i<=n;++i){
		cin>>a[i].lose>>a[i].win>>a[i].use;
	}
	for(ll i = 1;i<=n;++i){
		for(ll j = 0;j<=m;++j){
			//选择打败或者不打败
			if(j>=a[i].use){
				dp[i][j]=max(dp[i-1][j]+a[i].lose,dp[i-1][j-a[i].use]+a[i].win);
			}else{
				//打不败
				dp[i][j]+=a[i].lose;
			}
		}
	}
	ll t = dp[n][m];
	t*=5;
	cout<<t;
	return 0;
}

2022/8/8 10:27
加载中...