動態規劃之揹包問題

2021-07-16 13:03:08 字數 1522 閱讀 5829

最近刷題遇到好幾道揹包問題,揹包問題是動態規則中的一類體型,在考察演算法的筆試中經常遇到。

關於揹包問題,文章 揹包問題九講 中已經做了很多分析,這裡就不再細述,建議好好看看這篇文章。

然而文章給了許多案例分析,卻沒有很好的練習。

說明:

1、本文目的不在於講解揹包問題的分析與講解,而是收集了一些揹包問題。希望學習者學習揹包問題的時候能找到一些對應的題加以練習。

2、本文根據我是刷題中遇到的揹包問題,會不定期更新內容。

0-1 揹包問題

1、兌換獎券

基本解法:

#include #include #include using namespace std;

int main()

cout << dp[m] << endl;

} return 0;

}

如果要輸出最優方案,增加乙個state狀態陣列,修改**如下:

#include #include #include using namespace std;

int main()

} } cout << dp[m] << endl;

i = n;

j = m;

while (--i >= 0)

}} return 0;

}

2、和為m的組合的個數(求方案數)

在n個數中找出其和為m的若干個數。先讀入正整數n(1< n< 100)和m(1< m< 10000),  再讀入n個正數(可以有相同的數字,每個數字均在1000以內),  在這n個數中找出若干個數,  使它們的和是m,  把滿足條件的數字組合都找出來以統計組合的個數,輸出組合的個數(不考慮組合是否相同)

#include #include using namespace std;

int main()

cout << dp[m] << endl;

return 0;

}

完全揹包問題

1、兌換獎券

#include #include #include using namespace std;

int main()

cout << dp[m] << endl;

} return 0;

}

2、換零錢

(求方案數)

有乙個陣列changes,changes中所有的值都為正數且不重複。每個值代表一種面值的貨幣,每種面值的貨幣可以使用任意張,對於乙個給定值x,計算組成這個值的方案數。

int countways(vectorchanges, int n, int x)

return dp[x];

}

3、換零錢(求最少硬幣數)

題解 分組揹包問題

不超過n元錢:

題解:泛化物品

提公升英雄: 

題解:

動態規劃之揹包問題

一 問題描述 有n 個物品,它們有各自的重量和價值,現有給定容量的揹包,如何讓揹包裡裝入的物品具有最大的價值總和?二 總體思路 根據動態規劃解題步驟 問題抽象化 建立模型 尋找約束條件 判斷是否滿足最優性原理 找大問題與小問題的遞推關係式 填表 尋找解組成 找出01揹包問題的最優解以及解組成,然後編...

動態規劃之 揹包問題

前些天在做動態規劃的題,感覺動態規劃博大精深,沒有一種特定的模式,學起來很費勁。在這裡就動態規劃中的揹包問題談談。三種揹包問題 0 1揹包,完全揹包,多重揹包。0 1揹包 有n件物品和容量為v的揹包,求解將哪些物品放入揹包中可以使獲得的價值最大。f i v 表示將前i件物品恰好放入容量為v的揹包可以...

動態規劃之揹包問題

vivo2019提前批筆試第三題 小v負責一次活動禮品採購,每一款禮品的受歡迎程度 熱度值 各不相同,現給出總金額以及各個禮品的單價 和熱度值,且每個禮品只購買乙個,如何購買可以使得所有禮品的總熱度值最高。輸入 第一行是乙個正整數,表示總金額 不大於1000 第二行是乙個長度為n的正整數陣列,表示禮...