装箱问题(模板)
01背包:f[j]表示装满j个空间获得的最大价值
装箱问题:f[j]表示是否可以装满j个空间
include<bits/stdc++.h>
using namespace std;
namespace{
template<typename t="">
inline void read(T &s){
T f=1;s=0;char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-1;
for(;isdigit(ch);ch=getchar()) s=(s<<1)+(s<<3)+(ch^48);
s*=f;
}
}
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ll long long
int v,n;
int a[35];
bool f[20005]; //f[i][j]表示前i个物品能否装满j个空间
int main(){
read(v);read(n);
for(int i=1;i<=n;++i)
read(a[i]);</typename>
//f[0]=1是边界 f[0]=1; for(int i=1;i<=n;++i){ for(int j=v;j>=a[i];--j){ if(f[j-a[i]]!=0) f[j]=f[j-a[i]]; } } for(int j=v;j>0;--j) if(f[j]){ cout << v-j; break; }
return 0;
}