快樂(01背包問題)

//快樂(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;
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(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背...
    Tibbersshao閱讀 2,939評論 0 2
  • 題目 有N件物品和一個容量為V的背包。第i件物品的費用是c[i],價值是w[i]。求解將哪些物品裝入背包可使價值總...
    six只羊閱讀 2,017評論 0 13
  • N件物品,沒見有重量Wi,價值Vi;選其中幾件放入容量為M的背包中,求價值的最值。——經(jīng)典背包問題背包問題分三類:...
    Chuck_Hu閱讀 1,608評論 0 0
  • 一、為什么要早起 關(guān)于晚睡有什么害處,我參考了很多資料,說法千奇百怪,但是都沒有肯定的科學上的依據(jù),因此,只...
    孫昱閱讀 467評論 0 1
  • 今日體驗,今日一天特別忙,一天就給寶馬換差速器了,拆的時候很不好拆,基本都是體力活,經(jīng)過了第一次的拆裝,從中學到了...
    任武科閱讀 124評論 0 0

友情鏈接更多精彩內(nèi)容