题解 | #装箱问题#
装箱问题
https://www.nowcoder.com/practice/c990bd0bf8e04bfbb19c0964401c8f77
#include <iostream> using namespace std; const int N = 2*1e4+10; int dp[N]; //dp[k]表示容量为v时,最大能装多大体积的物品 int nums[31]; int main() { int v,n; scanf("%d", &v); scanf("%d", &n); for(int i = 1; i <= n; i++){ scanf("%d", &nums[i]); } for(int i = 1; i<=n;i++){ for(int j = v; j >= 0; j--){ if(j>=nums[i]){ dp[j] = max(dp[j], dp[j-nums[i]]+nums[i]); } } } printf("%d", v-dp[v]); return 0; } // 64 位输出请用 printf("%lld")