【動態規劃1】動態規劃的引入 P1802 5倍經驗日 兩種狀態

【動態規劃1】動態規劃的引入 P1802 5倍經驗日

【動態規劃1】動態規劃的引入

狀態轉移方程:

dp[i][j]=max(dp[i][j],dp[i-1][j]+lose[i]);//不用藥水的失敗轉移
if(j>=use[i])dp[i][j]=max(dp[i][j],dp[i-1][j-use[i]]+win[i]);//使用藥水的成功轉移

 

AC代碼如下:

#include <bits/stdc++.h>
#define maxn 1010
#define LL long long
using namespace std;
int n,m;
int lose[maxn],win[maxn],use[maxn];
int dp[maxn][maxn];
int main(){
	int i,j,k;
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++)scanf("%d%d%d",&lose[i],&win[i],&use[i]);
	for(i=1;i<=n;i++)
		for(j=0;j<=m;j++){
			dp[i][j]=max(dp[i][j],dp[i-1][j]+lose[i]);//不用藥水的失敗轉移
			if(j>=use[i])dp[i][j]=max(dp[i][j],dp[i-1][j-use[i]]+win[i]);//使用藥水的成功轉移
		}	
	printf("%lld\n",(LL)dp[n][m]*5);//此處int會溢出,比較隱蔽。
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章