- [P1441 砝码称重](https://www.luogu.com.cn/problem/P1441)
题意:现有 n个砝码,重量分别为 ai,在去掉 m 个砝码后,问最多能称量出多少不同的重量(不包括 0)。
dfs找到所有状态
void dfs(int pick,int pp){//全排列
if(pp>m)return;
//cout<<pick<<" "<<pp<<endl;//debug
if(pick==n){
if(pp==m){
// cout<<pp<<endl;
dpp();
}
return;
}
dfs(pick+1,pp);
f[pick]=1;//cout<<pick<<endl;
dfs(pick+1,pp+1);
f[pick]=0;
}
之后使用01背包
void dpp(){//01背包
memset(dp,0,sizeof(dp));
dp[0]=1;
ans=0;tot=0;
for(int i=0;i<n;i++){
if(f[i]!=0)continue;
for(int j=tot;j>=0;j--){
if(dp[j]==1&&dp[j+a[i]]==0){
dp[j+a[i]]=1;
ans++;
//cout<<j+a[i]<<" "<<ans<<endl;
}
}tot+=a[i];
}
//cout<<ans<&