1 条题解

  • 0
    @ 2026-1-28 14:53:41
    #include<bits/stdc++.h>
    using namespace std;
    // [1] arr:存储每个集装箱的重量;dp:动态规划数组,dp[j]表示载重为j时的最大装载重量
    int  arr[10100];
    int  dp[10100]={};
    
    int main(){
        int  n,c; // [2] n:集装箱的数量;c:轮船的最大载重
    	cin>>n>>c; // [3] 读取集装箱数量和轮船载重
    	// [4] 读取每个集装箱的重量,存入数组arr
    	for(int i=0;i<n;i++) cin>>arr[i];
    	
    	// [5] 0-1背包核心逻辑:遍历每个集装箱,更新不同载重下的最大装载量
    	for(int i=0;i<n;i++){// 外层循环:遍历每个集装箱(物品)
    		// 内层循环:逆序遍历载重,避免同一个集装箱被重复选取(0-1背包特性)
    		for(int j=c;j>=arr[i];j--){// 对载重从大到小讨论
    				// 递推式:载重j时的最大装载量 = max(不选当前集装箱的原有值, 选当前集装箱后的值)
    				dp[j]=max(dp[j],dp[j-arr[i]]+arr[i]);
    		}
    	}
    	// [6] 输出轮船最大载重c下的最大装载重量
    	cout<<dp[c];
        return 0;
    }
    
    • 1

    信息

    ID
    1341
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者