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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

ACM:动态规划,01背包问题

發(fā)布時(shí)間:2024/4/14 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ACM:动态规划,01背包问题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目:

有n件物品和一個(gè)容量為C的背包。(每種物品均僅僅有一件)第i件物品的體積是v[i],重量是w[i]。選一些物品裝到這個(gè)背包中,使得背包內(nèi)物品在整體積不超過(guò)C的前提下重量盡量大。

解法:兩種思路:

第一種:d(i, j)表示“把第i,i+1,i+2,...n個(gè)物品裝到容量為j的背包中的接下來(lái)的最大總重量”。

? ? ? ? ? ? d(i, j) = max{d(i+1, j), d(i+1, j-v[i])+w[i]} ? ? 前面一項(xiàng)表示不放第i個(gè)物品,后面一項(xiàng)表示放第i個(gè)物品。

然后取兩者之中最大的那個(gè)。

#include <iostream> #include <string> using namespace std;const int MAXN = 10000; int n, C, v[MAXN], w[MAXN]; int d[MAXN][MAXN]; //d(i, j)表示“把第i,i+1,i+2,...n個(gè)物品裝到容量為j的背包中的接下來(lái)的最大總重量”int main() {cin >> n >> C;for(int i = 0; i < n; ++i) {cin >> v[i] >> w[i];}memset(d, 0, sizeof(d));for(int i = n; i >= 1; --i) {for(int j = 0; j <= C; ++j) {d[i][j] = (i == n ?

0 : d[i+1][j]); //不放第i個(gè)物品 if(j >= v[i]) d[i][j] = max(d[i][j], d[i+1][j-v[i]]+w[i]); //不放第i個(gè)物品跟放第i個(gè)物品之間的最大值 } } cout << d[1][C] << endl; return 0; }


另外一種:d(i, j)表示“把前 i 個(gè)物品裝到容量為 j 的背包中的最大總重量”。

? ? ? ? ? ? d(i, j) = max{d(i-1, j), d(i-1, j-v[i])+w[i]} ? ? 前面一項(xiàng)表示不放第i個(gè)物品。后面一項(xiàng)表示放第i個(gè)物品。

然后取兩者之中最大的那個(gè)。

#include <iostream> #include <string> using namespace std;const int MAXN = 10000; int n, C; int d[MAXN][MAXN]; //d(i, j)表示“把前 i 個(gè)物品裝到容量為 j 的背包中的最大總重量”。int main() {cin >> n >> C;memset(d, 0, sizeof(d));int v, w;for(int i = 1; i <= n; ++i) {cin >> v >> w;for(int j = 0; j <= C; ++j) {d[i][j] = (i == 1 ?

0 : d[i-1][j]); //第i個(gè)沒(méi)放進(jìn)去 if(j >= v) d[i][j] = max(d[i][j], d[i-1][j-v]+w); //不放第i個(gè)物品跟放第i個(gè)物品之間的最大值 } } cout << d[n][C] << endl; return 0; }





轉(zhuǎn)載于:https://www.cnblogs.com/yangykaifa/p/7063098.html

總結(jié)

以上是生活随笔為你收集整理的ACM:动态规划,01背包问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。