0-1背包——动态规划
来源:互联网 发布:淘宝app订单页面 编辑:程序博客网 时间:2024/05/17 04:19
0-1背包——动态规划
#include<iostream>#include<vector>#include<iomanip>#include<algorithm>using namespace std;class KnapBack{public :KnapBack(){cin >> n>>c;W.assign(n + 1, 0);P.assign(n + 1, 0);X.assign(n + 1, 0);for (int i = 1; i <= n; i++){int in;cin >> in;W[i] = in;}for (int i = 1; i <= n; i++){int in;cin >> in;P[i] = in;}vector<int> im;M.push_back(im);for (int i = 1; i <= n; i++){vector<int> im1(c+1, 0);M.push_back(im1);}}void Knapsack(){for (int j = 1; j <= c; j++){if (j >= W[n]){M[n][j] = P[n];}else{M[n][j] = 0;}}for (int i = n-1; i >= 1; i--){for (int j = 1; j <= c; j++){if (j >= W[i])//能装{M[i][j] = max(M[i+1][j] , M[i+1][j-W[i]] + P[i]);}else{M[i][j] = M[i + 1][j];}}}}void TraceBack(int i, int j)//构造最优解{if (i < n){if (j >= W[i]){if (M[i][j] == M[i + 1][j - W[i]] + P[i]){X[i] = 1;TraceBack(i + 1, j - W[i]);}else{X[i] = 0;TraceBack(i + 1, j);}}else{X[i] = 0;TraceBack(i + 1, j);}}if (i == n){if (j >= W[i]){X[i] = 1;}else{X[i] = 0;}}}void print(){cout << "OutPut :" << endl;for (int i = 1; i <= n; i++){cout << setw(4) << W[i] << " ";}cout << endl;for (int i = 1; i <= n; i++){cout << setw(4) << P[i] << " ";}cout << endl;for (int i = 1; i <= n; i++){for (int j = 1; j <= c; j++){cout << setw(4) << M[i][j] << " ";}cout << endl;}cout << endl;TraceBack(1 , c);cout << "Schedule : ";for (int i = 1; i <= n; i++){cout << setw(4) << X[i] << " ";}cout << endl;}public:vector<int> W;//各物品重量vector<int> P;//各物品价格vector<vector<int> > M;//最大价值int n;//物品数量int c;//背包容量vector<int> X;//装入方案};KnapBack KB;int main(){KB.Knapsack();KB.print();return 0;}
0 0
- 动态规划——0-1背包
- 0-1背包——动态规划
- 动态规划——0-1背包
- 动态规划0—1背包问题
- 动态规划0—1背包问题
- 动态规划0—1背包问题
- 动态规划0—1背包问题
- 动态规划0—1背包问题
- 动态规划0—1背包问题
- 动态规划0—1背包问题
- 动态规划—0-1背包问题
- 动态规划0—1背包问题
- 动态规划0—1背包问题
- 动态规划0—1背包问题
- 动态规划—0-1背包
- 动态规划——0/1背包问题
- 0-1背包问题——动态规划
- 动态规划——0-1背包问题
- 不耻下问
- 音乐男孩
- 我住校了
- 我校百日誓师大会宣言
- 太阳能热水器达到了99摄氏度
- 0-1背包——动态规划
- 拼音输入法技巧-智能ABC
- 隐藏在你电脑里的小电影
- 有没有搞错
- 我最讨厌做的事
- 宿舍里的插座
- 体育考试
- 送个QQ:240335209
- “鞋龙”