1 条题解
-
1
#include <iostream> #include <vector> #include <cmath> using namespace std; int main() { int n, v, i, j; cin >> n >> v; vector<pair<int, int>> item; for (i = 0; i < n; i++) { int vi, wi; cin >> vi >> wi; item.push_back({vi, wi}); } // 初始化dp数组,dp[0] = 0,其他为INT_MIN(表示不可达) vector<int> dp(n + 1, INT_MIN); dp[0] = 0; for (i = 0; i < n; i++) { int vi = item[i].first; int wi = item[i].second; for (j = v; j >= vi; j--) { if (dp[j - vi] != INT_MIN) { dp[j] = max(dp[j], dp[j - vi] + wi); } } } // 如果dp[v]为INT_MIN,说明没有方案能装满背包,输出0;否则输出dp[v] if (dp[v] == INT_MIN) { cout << 0 << endl; } else { cout << dp[v] << endl; } return 0; }
- 1
信息
- ID
- 157
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 3
- 已通过
- 2
- 上传者