1 条题解
-
0
#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
- 上传者