//快樂(01背包)
#include <iostream>
#define HP 2000
using namespace std;
int gethappy[70];
int losspow[70];
int dp[70][HP];
int n;
int Maxhappiness()
{
for(int i = n; i >=1; --i)
{
for(int j = 1; j <= HP; ++j)//最少剩余1點血量
{
dp[i][j] = (i == n)?0:dp[i+1][j];//先假設(shè)不拿第i個
if(losspow[i] <= j)
dp[i][j] = max(dp[i][j], dp[i+1][j-losspow[i]] + gethappy[i]);
//再和拿第i個的情況做對比,選擇大的那個(面對第i+1個的時候有i的快樂值和扣除了i消耗的血量)
//這里因為數(shù)組足夠大,在dp[n+1][]中是0,意味著面對最后一個選擇時,如果拿得下就拿。
}
}
return dp[1][HP];//表示的是滿血,面對第一個選擇的時候,能達到的最高快樂值。
}
int main()
{
cin >> n;
for(int i = 1; i <= n; ++i)
cin >> gethappy[i];
for(int i = 1; i <= n; ++i)
cin >> losspow[i];
cout << Maxhappiness() + 1;//注意初始快樂值有1點
return 0;
}
快樂(01背包問題)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
相關(guān)閱讀更多精彩內(nèi)容
- 很經(jīng)典的動態(tài)規(guī)劃問題,具體思路這里就不列出了,網(wǎng)上太多資料了。想要詳細理解的話可以去看背包九講這里分別列出,01背...
- 題目 有N件物品和一個容量為V的背包。第i件物品的費用是c[i],價值是w[i]。求解將哪些物品裝入背包可使價值總...
- N件物品,沒見有重量Wi,價值Vi;選其中幾件放入容量為M的背包中,求價值的最值。——經(jīng)典背包問題背包問題分三類:...