top1编程
← 返回题目
题解

【基础】简单背包问题

1 条题解

  • 0
    @ 2026-7-29 0:16:31
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    int main() {
        int maxw, n;
        cin >> maxw >> n;
        
        int weight[105], value[105];
        for (int i = 1; i <= n; i++) {
            cin >> weight[i] >> value[i];
        }
        
        // dp[j] 表示背包容量为 j 时的最大价值
        int dp[20005] = {0};
        
        for (int i = 1; i <= n; i++) {
            // 从大到小遍历,保证每个物品只选一次
            for (int j = maxw; j >= weight[i]; j--) {
                dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);
            }
        }
        
        cout << dp[maxw] << endl;
        
        return 0;
    }
    
    • 1