题目:http://acm.hdu.edu.cn/showproblem.php?pid=2602
AC代码(C++):
#include <iostream> #include <algorithm> #define INF 0x3f3f3f3f using namespace std; int n, v; int val[1005]; int vol[1005]; int dp[1005][1005]; int main() { int t; cin >> t; while (t--) { cin >> n >> v; for (int i = 1; i <= n; i++)cin >> val[i]; for (int i = 1; i <= n; i++)cin >> vol[i]; memset(dp, 0, sizeof(dp)); for (int i = 1; i <= n; i++) { for (int j = 0; j <= v; j++) { if (j < vol[i])dp[i][j] = dp[i - 1][j]; else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - vol[i]] + val[i]); } } cout << dp[n][v] << endl; } //system("pause"); }总结: 01背包问题. 注意j要从0开始, 因为可能有重量为0的物品, 就因为这个WA了几次.