P1049 装箱问题(dp)
#include<bits/stdc++.h>
using namespace std;
int main() {
int v,n;
cin>>v>>n;
int a[30];
int dp[20005];
for(int i=0;i<n;i++){
cin>>a[i];
}
memset(dp,0,sizeof(dp));// 设置所有元素为0,表示最大体积为0
for(int i=0;i<n;i++){
for(int j=v;j>=a[i];j--){ // 从大到小遍历,防止重复使用同一个物品
dp[j]=max(dp[j],dp[j-a[i]]+a[i]);
}
}
cout<<v-dp[v];
}
dp[j]
表示当前容量为 j
时能够装入的最大物品体积。