装箱问题(回溯解法)
解法
这道题明显是 01 背包问题。能否用回溯解决呢?让我们看一看:
代码
#include<bits/stdc++.h>
using namespace std;
int v,n,a[1000001],ans=1e9;
void dfs(int c,int curw){
if(c==n+1){
ans=min(ans,v-curw);
return;
}
if(curw+a[c]<=v){
dfs(c+1,curw+a[c]);
}
dfs(c+1,curw);
return;
}
int main(){
cin>>v>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
dfs(1,0);
cout<<ans;
return 0;
}