01背包问题
来源:互联网 发布:excel表格怎么数据统计 编辑:程序博客网 时间:2024/06/07 04:55
//01背包的状态转换方程 f[i,j] = Max{ f[i-1,j-Wi]+Pi( j >= Wi ), f[i-1,j] }
//f[i,j]表示在前i件物品中选择若干件放在承重为 j 的背包中,可以取得的最大价值。
//Pi表示第i件物品的价值。
//决策:为了背包中物品总价值最大化,第 i件物品应该放入背包中吗 ?
#include <iostream>#include <vector>#include <algorithm>using namespace std;int dp(vector<int> weights, vector<int>value, int bag){ int row, col; row = weights.size() - 1; col = bag; vector<vector<int>> res(row + 1, vector<int>(col + 1, 0)); for (int i = 1; i <= row; i++) for (int j = 1; j <= col; j++) { if (weights[i] <= j) res[i][j] = max(res[i - 1][j], res[i - 1][j - weights[i]] + value[i]); //res[i][j]表示把i件物品放进承受力为j的背包的最大价值 else res[i][j] = res[i - 1][j]; } return res[row][col];}int main(){ int n, m; cin >> n >> m; vector<int> weights; weights.push_back(0); vector<int> value; value.push_back(0); for (int i = 0; i < n; i++) { int num, val; cin >> num >> val; weights.push_back(num); value.push_back(val); } cout << dp(weights, value, m) << endl; system("pause"); return 0;}
扩展
一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可以处理1kb,每个核同时只能处理一项任务。n个任务可以按照任意顺序放入CPU进行处理,现在需要设计一个方案让CPU处理完这批任务所需的时间最少,求这个最小的时间。
输入描述:
输入包括两行:
第一行为整数n(1 ≤ n ≤ 50)
第二行为n个整数length[i](1024 ≤ length[i] ≤ 4194304),表示每个任务的长度为length[i]kb,每个数均为1024的倍数。
输出描述:
输出一个整数,表示最少需要处理的时间
输入例子1:
5
3072 3072 7168 3072 1024
输出例子1:
9216
#include <iostream>#include <vector>#include <algorithm>using namespace std;int dp(vector<int> weights, int bag){ int row, col; row = weights.size() - 1; col = bag; vector<vector<int>> res(row + 1, vector<int>(col + 1, 0)); for (int i = 1; i <= row; i++) for (int j = 1; j <= col; j++) { if (weights[i] <= j) res[i][j] = max(res[i - 1][j], res[i - 1][j - weights[i]] + weights[i]); //res[i][j]表示把i件物品放进承受力为j的背包的最大价值 else res[i][j] = res[i - 1][j]; } return res[row][col];}int main(){ int n; cin >> n; vector<int> weights; weights.push_back(0); int sum = 0; for (int i = 0; i < n; i++) { int num; cin >> num; weights.push_back(num / 1024); sum += num / 1024; } int half = sum / 2;//转换成01背包问题 cout << (sum- dp(weights, half)) * 1024 << endl; system("pause"); return 0;}
阅读全文
0 0
- 背包问题---01背包
- DP 背包问题 01背包
- 01背包--苹果,背包问题
- 01背包 完全背包问题
- 背包问题之01背包
- 背包问题之01背包
- 背包问题1:01背包
- 背包问题《1》01背包
- 01背包+完全背包问题
- 背包问题-背包01-苹果
- 背包问题之01背包
- 背包问题(01背包,完全背包,多重背包)
- 背包问题(01背包,完全背包,多重背包)
- 动态规划-----背包问题-----01背包,完全背包,多重背包
- 经典背包问题 01背包+完全背包+多重背包
- 背包(01背包、完全背包、多重背包)问题总结
- 背包问题(01背包,完全背包,多重背包)
- 经典背包问题 01背包+完全背包+多重背包
- 796B
- Linux下用户组、文件权限详解
- 头条号如何提升互动度
- session和cookie作用原理,区别
- sklearn.metrics.precision_score 中 unknow is not supported 问题
- 01背包问题
- Powershell 编写和运行脚本
- swt浏览文件 显示文件目录 swt显示图片以及图片缩放处理
- Vivado IP核生成设置
- reshape
- 记一次艰难的MySQL库的安装过程
- uiautomator1.0入门介绍
- 利用AI视频监控“预测犯罪”,这事儿到底靠谱吗?
- spring inaction 视图