日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

动态规划 —— 01背包问题

發布時間:2024/5/6 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态规划 —— 01背包问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

01背包問題

有n個重量和價值分別為wi,vi的物品。
從這些物品中挑選出總重量不超過W的物品,
求所有挑選方案中價值總和的最大值。

針對每個物品是否放入背包進行搜索

#include <iostream>#define MAX_N 100using namespace std;int n, W; int w[MAX_N], v[MAX_N];int rec(int i, int j) { //從第i個物品開始挑選總重量小于j的部分int res;if (i == n) res = 0; //已經沒有剩余物品了else if (j < w[i]) res = rec(i + 1, j); //無法挑選這個物品else res = max(rec(i + 1, j), rec(i + 1, j - w[i]) + v[i]); //挑選和不挑選的兩種情況都嘗試一下return res; }int main() {cin >> n;for (int i = 0; i < n; i++)cin >> w[i] >> v[i];cin >> W;cout << rec(0, W) << endl;return 0;

這種方法的搜索深度是n,而且每一層的搜索都需要兩次分支,最壞就需要O(2n)的時間,當n比較大的時候就沒辦法解了。

為了避免產生重復計算采用記憶化搜索

#include <iostream> #include <cstring>#define MAX_N 100 #define MAX_W 100using namespace std;int n, W; int w[MAX_N], v[MAX_N]; int dp[MAX_N + 1][MAX_W + 1];int rec(int i, int j) {if (dp[i][j]) return dp[i][j]; //已經計算過的話直接使用之前的結果int res;if (i == n) res = 0;else if (j < w[i]) res = rec(i + 1, j);else res = max(rec(i + 1, j), rec(i + 1, j - w[i]) + v[i]);return dp[i][j] = res; }int main() {cin >> n;for (int i = 0; i < n; i++)cin >> w[i] >> v[i];cin >> W;memset(dp, 0, sizeof(dp));cout << rec(0, W);return 0; }

對于同樣的參數,只會在被調用到時執行遞歸部分,第二次之后都會直接返回。參數的組合不過nW種,而函數內只調用2次遞歸,所以只需要O(nW)的復雜度就能解決。

DP數組

記dp[i][j]根據rec的定義,從第i個物品開始挑選總重小于j時總價值的最大值。

遞推公式:
dp[n][j]=0
if(j<w[i]) dp[i][j]=dp[i+1][j]
else dp[i][j]=max(rec(i+1,j),rec(i+1,j-w[i])+v[i])

#include <iostream>#define MAX_N 100 #define MAX_W 100using namespace std;int n, W; int w[MAX_N], v[MAX_N]; int dp[MAX_N + 1][MAX_W + 1];int main() {cin >> n;for (int i = 0; i < n; i++)cin >> w[i] >> v[i];cin >> W;for (int i = n - 1; i > -1; i--) {for (int j = 0; j < W + 1; j++) {if (j < w[i]) dp[i][j] = dp[i + 1][j];else dp[i][j] = max(dp[i + 1][j], dp[i + 1][j - w[i]] + v[i]);}}cout << dp[0][W];return 0; }

總結

以上是生活随笔為你收集整理的动态规划 —— 01背包问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产一线在线 | a视频 | 日本三级视频在线播放 | 亚洲精品v天堂中文字幕 | 精品99视频 | 四虎av影视 | 91碰碰| 红桃成人网 | 国产精品久久一区二区三区动 | 国产aⅴ精品一区二区三区久久 | 91福利专区 | av天天射 | 欧美精品一区二区三区久久 | 操批网站 | 天堂а√在线中文在线新版 | 亚洲熟妇无码另类久久久 | 成人免费看片98欧美 | 中国大陆高清aⅴ毛片 | 久久久高潮 | 张津瑜国内精品www在线 | 亚洲免费视频观看 | 午夜精品一区二区在线观看 | 91尤物国产福利在线观看 | 青草视频在线观看免费 | 国产又粗又猛又爽视频 | 中文字幕网伦射乱中文 | 亚洲一区影视 | 亚洲天堂一区二区 | 亚洲一二三四五 | 国产免费不卡 | 性chinese天美传媒麻 | 天天爽夜夜爽夜夜爽精品视频 | 99热精品在线播放 | 亚洲欧美一级 | 污黄啪啪网| 欧美图片一区二区 | 日韩久久电影 | 综合色婷婷一区二区亚洲欧美国产 | 亚天堂| 中文字幕人妻一区二区三区在线视频 | 一级黄色毛毛片 | 青青艹在线视频 | 国产午夜精品免费一区二区三区视频 | 中文字幕一区二区三区人妻不卡 | 伊人免费视频 | 桃色在线视频 | 69av在线视频 | 爱的天堂| 毛片在线观看视频 | 国产女人水真多18毛片18精品 | 欧美性俱乐部 | 另类ts人妖一区二区三区 | 成人性做爰aaa片免费 | 国产精品欧美日韩 | 国产3页| 久久国产精品免费看 | 四虎精品在线观看 | 女人一级一片30分 | 国模精品视频一区二区 | 欧美一区二区三区视频在线 | 国产精品色片 | 久久视频网 | 76少妇精品导航 | 成人在线观看国产 | 国产黄色精品网站 | 国产伊人自拍 | 天天看黄色片 | 91插插插插插 | 日本免费一区二区三区 | 国产一级片免费看 | 欧美啪啪一区 | 久久r精品| 日韩精品第一页 | 蜜桃一区二区三区 | 国产伦理在线 | 国产精品人人做人人爽 | 狠狠鲁影院 | 丰满大乳国产精品 | 免费a视频在线观看 | 一区二区三区视频在线免费观看 | 成年人视频网 | 中国毛片基地 | 五月天导航 | 久久综合欧美 | 97人妻一区二区精品免费视频 | 国产精品日韩欧美一区二区三区 | 韩国精品av | 国产成人99久久亚洲综合精品 | 色婷婷综合久久 | 欧美大色网 | 中文字幕 自拍偷拍 | 欧美黄色三级 | 青娱乐国产在线视频 | 亚洲天堂免费在线观看视频 | 99精品国自产在线 | 久艹在线播放 | 欧美激情三级 | 无码国产精品一区二区免费式直播 | 美女屁股眼视频网站 |