自用。
题目传送门:[NOIP2001 普及组] 装箱问题 - 洛谷
题解:Inori_333
参考题解:无
cpp
/*
P1049 [NOIP2001 普及组] 装箱问题
https://www.luogu.com.cn/problem/P1049
2024/10/27 submit:inori_333
*/
#include <iostream>
#include <cstring>
using namespace std;
int vol, n;//v表示箱子容积,n表示物品数量
int v[31];//v[i]表示第i个物品的体积
int dp[20005];//dp[i]表示体积为i的箱子最多能装体积为多少的物品
int main(){
cin >> vol >> n;
memset(dp,0,sizeof(dp));
for (int i = 1; i <= n;i++){
cin >> v[i];
}
for (int i = 1; i <= n;i++){
for (int j = vol; j >= v[i];j--){
dp[j]=max(dp[j],dp[j-v[i]]+v[i]);
}
}
cout << vol - dp[vol];
}