【算法题】0-1 背包问题
来源:互联网 发布:外卖电话软件 编辑:程序博客网 时间:2024/06/05 16:45
问题如图:
常规动态规划解法
使用二维数组:
#include<stdio.h>#include<vector>#include <algorithm>using namespace std;int main(){ int B(0); int pi, vi; vector<int> P; vector<int> V; P.resize(3000); V.resize(3000); int n(0); scanf("%d", &B); while (1) { scanf("%d", &P[n]); scanf("%d", &V[n]); ++n; char c = getchar(); if (c == '\n') { break; } } vector<vector<int>> F; F.resize(n); for (auto i = 0; i < n;++i) { F[i].resize(B+1); } //初始化F[0][j] for (auto j = 0; j < P[0];++j) F[0][j] = 0; for (auto j = P[0]; j <=B; ++j) F[0][j] = V[0]; for (auto i = 1; i < n; ++i) { for (auto j = 0; j < P[i];++j) { F[i][j] = F[i - 1][j]; } for (auto j = P[i]; j <= B;++j) { F[i][j] = max(F[i-1][j],F[i-1][j-P[i]]+V[i]); } } printf("%d\n", F[n-1][B]); return 0;}
常规方法需要M*N 内存,为了节省内存,可使用一维数组,内存需求可降低到M
参见:http://blog.csdn.net/qq_32036091/article/details/51301912
#include<stdio.h>#include<vector>#include <algorithm>using namespace std;int main(){ int B(0); int pi, vi; vector<int> P; vector<int> V; P.resize(3000); V.resize(3000); int n(0); scanf("%d", &B); while (1) { scanf("%d", &P[n]); scanf("%d", &V[n]); ++n; char c = getchar(); if (c == '\n') { break; } } vector<int> F; F.resize(B+1); for (auto i = 0; i < n;++i) { for (auto j = B; j >= P[i];--j) { F[j] = max(F[j],F[j-P[i]]+V[i]); } } printf("%d\n", F[B]); return 0;}
阅读全文
0 0
- 【算法题】0-1 背包问题
- 算法0-1背包问题:
- 【算法】0-1背包问题
- 算法 0-1背包问题
- 【算法】贪心算法(0-1背包问题)
- 【算法】贪心算法(0-1背包问题)
- 0-1背包问题、背包问题(贪心算法)
- 算法题/背包问题
- 【算法导论】0-1背包问题 与 部分背包
- 经典算法之背包问题(0-1背包)
- 【算法导论】0-1背包问题 与 部分背包
- noj算法题——0-1背包问题
- 算法1-3:0-1背包问题
- 贪心算法运用于(0/1)背包问题
- 回溯算法之0-1背包问题
- 0/1背包问题的贪心算法
- 0/1背包问题遗传算法
- 贪心算法---0/1部分背包问题
- AJAX处理php文件示例
- LeetCode133 Clone Graph
- SARSA和Q-learning算法
- Oracle基本操作十二:存储过程及定时调用存储过程
- 深入理解ArrayList与LinkedList的区别
- 【算法题】0-1 背包问题
- 初始化一个项目工程
- 错误日记 函数返回数组
- 平面坐标系绕原点顺时针变化
- swjtuoj 2381 Matrix
- 如何消除Permission is only granted to system apps报错
- windows环境下使用git客户端、GitHub和TortoiseGit管理项目代码
- 使用原生JDBC从数据库读取数据并且封装
- 【读书笔记】大规模Web开发技术(前言)