8 条题解

  • 1
    @ 2025-3-9 9:26:27

    时间空间复杂度最小一维数组加注释谁要

    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    int main() {
        int m, n; // 背包容量和物品数量
        cin >> m >> n;
    
        int W[n]; // 物品重量
        int C[n]; // 物品价值
    
        // 输入物品的重量和价值
        for (int i = 0; i < n; i++) {
            cin >> W[i] >> C[i];
        }
    
        // dp[j] 表示背包容量为 j 时的最大价值
        int dp[m + 1] = {0}; // 初始化为0,表示容量为0时价值为0
    
        // 动态规划填表
        for (int i = 0; i < n; i++) { // 遍历每个物品
            for (int j = m; j >= W[i]; j--) { // 倒序遍历背包容量
                dp[j] = max(dp[j], dp[j - W[i]] + C[i]); // 状态转移方程
            }
        }
    
        // 输出最大价值
        cout << dp[m] << endl;
    
        return 0;
    }
    

    信息

    ID
    1725
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    267
    已通过
    99
    上传者