HUT-2602 01背包 记录路径
2012-06-27 12:48
232 查看
#include <cstdlib> #include <cstring> #include <iostream> using namespace std; int p[1005], w[1005], dp[1005][1005], N, V; void DP() { memset(dp, 0, sizeof (dp)); for (int i = 1; i <= N; ++i) { for (int j = V; j >= 0; --j) { if (j >= w[i] && dp[i-1][j-w[i]] + p[i] > dp[i-1][j]) { dp[i][j] = dp[i-1][j-w[i]] + p[i]; } else { dp[i][j] = dp[i-1][j]; } } } printf("%d\n", dp [V]); int T = V; for (int i = N; i >= 0; --i) { for (int j = T; j >= 0; --j) { if (dp[i][j] == dp[i-1][j]) { printf("没有选择该物品!\n"); break; } else if (dp[i][j] == dp[i][j-w[i]]+p[i]) { printf("选取了第%d号物品\n", i); T -= w[i]; break; } } } } int main() { int T; scanf("%d", &T); while (T--) { scanf("%d", &N); scanf("%d", &V); for (int i = 1; i <= N; ++i) { scanf("%d", &p[i]); } for (int i = 1; i <= N; ++i) { scanf("%d", &w[i]); } DP(); } return 0; } /* 5 10 5 5 2 2 5 3 1 6 7 3 */
相关文章推荐
- 记录路径的01背包问题
- uva 01背包记录路径
- 百度之星资格赛1004 01背包+记录路径套路
- 【01背包 && 记录路径 && 约束】Codeforces Round #436 (Div. 2) E. Fire
- POJ1853 Cat (变形与记录路径的01背包)
- UVA 624 CD(01背包/记录路径)
- UVA 624 CD(01背包+记录路径)
- HDU - 6083 度度熊的午饭时光 (记录路径的01背包)
- hdu2126Buy the souvenirs (01背包+记录路径的种数)
- CD - UVa 624 01背包记录路径
- Uva624(记录路径的01背包)
- UVA - 624 (01背包,记录路径)
- L3-001. 凑零钱 - 【01背包 + 记录路径 + 裸裸裸题】
- 新年趣事之打牌(01背包+记录路径)
- L3-001. 凑零钱 01背包 满包问题+记录路径
- PAT L3-001 凑零钱(01背包(布尔背包)+记录路径)
- UVA 624 CD (01背包+打印路径 或 dfs+记录路径)
- 2017百度之星资格赛:1004. 度度熊的午饭时光(01背包+记录路径)
- HDU 6083 度度熊的午饭时光(01背包+记录路径)
- 新年趣事之打牌 记录路径+数量判断的01背包问题