题目大概是这样子的
读题目之后,仔细理解发现是01背包的变形,需要空间的容量被分成了两种,由此需要两种数值的dp来运算。需要用到三层循环分别控制物品的选择、重量和体积,以卡路里为标准找最高结果
#include<iostream> using namespace std; int m, v; int i, j, n, w[51]/*体积*/, t[52]/*质量*/, k[51], dp[401][501]; int main() { cin >> v >> m >> n; for (int i = 1; i <= n; i++) { cin >> w[i] >> t[i] >> k[i]; } for (int i = 1; i <= n; i++) { for (int j = v; j >= w[i]; j--) { for (int z = m; z >= t[i]; z--) { dp[j][z] = max(dp[j - w[i]][z - t[i]] + k[i], dp[j][z]); } } } cout << dp[v][m]; return 0; }