HDU 2602 Bone Collector 01背包模板题
2016-11-16 18:04
281 查看
题目:
http://acm.hdu.edu.cn/showproblem.php?pid=2602题意:
给定物品数和背包容量,有n个物品,给出每个物品的体积和价值,问背包最多能装的最大价值是多少思路:
01背包模板题,不多说了。从头开始学动态规划。。。二维:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> using namespace std; const int N = 1010, INF = 0x3f3f3f3f; int dp ; int w , v ; int main() { int t, n, m; scanf("%d", &t); while(t--) { scanf("%d%d", &n, &m); for(int i = 1; i <= n; i++) scanf("%d", &v[i]); for(int i = 1; i <= n; i++) scanf("%d", &w[i]); for(int i = 1; i <= n; i++) for(int j = 0; j <= m; j++) if(j < w[i]) dp[i][j] = dp[i-1][j]; else dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + v[i]); printf("%d\n", dp [m]); } return 0; }
一维
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> using namespace std; const int N = 1010, INF = 0x3f3f3f3f; int dp ; int w , v ; int main() { int t, n, m; scanf("%d", &t); while(t--) { scanf("%d%d", &n, &m); for(int i = 1; i <= n; i++) scanf("%d", &v[i]); for(int i = 1; i <= n; i++) scanf("%d", &w[i]); memset(dp, 0, sizeof dp); for(int i = 1; i <= n; i++) for(int j = m; j >= w[i]; j--) dp[j] = max(dp[j], dp[j-w[i]] + v[i]); printf("%d\n", dp[m]); } return 0; }
相关文章推荐
- HDU 2602 Bone Collector(01背包)
- hdu 2602 Bone Collector(0-1背包)
- hdu 2602 Bone Collector(经典dp)
- HDU-2602-Bone Collector
- [ACM] hdu 2602 Bone Collector(01背包)
- hdu 2602 Bone Collector (01背包经典入门)
- 【01背包】HDU 2602 Bone Collector (模板题)
- HDU-2602 Bone Collector 01背包
- Bone Collector (HDU_2602) 01背包
- HDU 2602 Bone Collector(01背包裸题)
- HDU2602 Bone Collector(01背包)
- hdu 2602 Bone Collector (01 背包问题)
- hdu 2602 Bone Collector 01背包模板
- HDU 2602 Bone Collector
- hdu -2602(01背包)Bone Collector
- hdu 2602 (01 背包)Bone Collector
- HDU 2602 Bone Collector(01背包)
- hdu-2602-Bone Collector--01背包
- HDU 2602 Bone Collector(01背包裸题)
- hdu 2602 Bone Collector (0-1)