動態規劃(三)神奇的口袋 0 1揹包問題

2021-08-20 15:14:11 字數 1675 閱讀 6926

**實現:

遞迴實現

#includeusing namespace std;

int a[30];

int n;

int ways(int w, int k)

int main()

動規解法:

#includeusing namespace std;

int a[30];

int n;

int ways[40][30];//ways[i][j]表示從前j種物品裡湊出體積i的方法數

解題思路

要實現滾動陣列的思想必須從右向左賦值,

**實現:

#include#includeusing namespace std;

const int n=3500;

const int m = 12880;

int w[n], d[n], rate[m];

int main()

for (int i = 0; i < n; i++) }

cout << rate[m] << endl;

cin >> n;

return 0;

}

下面是利用二維陣列完成:

#include#includeusing namespace std;

const int n=3500;

const int m = 12880;

int w[n], d[n], rate[n][m];

int main()

for (int i = 1; i <= n; i++) }

cout << rate[n][m] << endl;

cin >> n;

return 0;

}

01揹包 動態規劃(三)

測試資料 int n 5 物品個數 int m 20 揹包容量 int weight new int 物品重量 int value new int 物品價值 1.遞迴版本 private static int knapsack int n,int m,int w,int v else if m w ...

神奇的口袋(動態規劃)

有乙個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。john現在有n個想要得到的物品,每個物品的體積分別是a 1,a 2 a n。john可以從這些物品中選擇一些,如果選出的物體的總體積是40,那麼利用這個神奇的口袋,john就可以得到這些物品。現在的問題是,j...

神奇的口袋(動態規劃)

有乙個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。john現在有n個想要得到的物品,每個物品的體積分別是a 1,a 2 a n。john可以從這些物品中選擇一些,如果選出的物體的總體積是40,那麼利用這個神奇的口袋,john就可以得到這些物品。現在的問題是,j...