WA 80pts
  • 板块P1441 砝码称重
  • 楼主LiaoYF1
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/12/15 11:33
  • 上次更新2023/10/24 07:39:56
查看原帖
WA 80pts
633466
LiaoYF1楼主2022/12/15 11:33
#include<iostream>
#include<cstring>
using namespace std;
int n,m,a[25],sum,ans;
bool d[25],f[2005];
int dp(){
    
    memset(f,0,sizeof(f));
    f[0]=1;
    for(int i=1;i<=n;i++){
        if(d[i])continue;
        for(int j=sum;j>=a[i];j--){
            f[j]=f[j]||f[j-a[i]];
        }
    }
    int res=0;
    for(int i=1;i<=sum;i++){
        if(f[i]){
            //cout<<i<<" ";
            res++;
        }
    }
    //cout<<"\n";
    return res;
}
void dfs(int x,int k){
    
    if(k>m)return;
    if(x==n){
        
        if(k==m)ans=max(ans,dp());
        return;
    }
    dfs(x+1,k);
    d[x]=1;
    dfs(x+1,k+1);
    d[x]=0;
    
}

int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        sum+=a[i];
    }
    dfs(1,0);
    cout<<ans;
    return 0;
}

附一个WA了的#8数据

20 4
74 67 39 93 92 99 56 39 35 81 45 1 77 66 98 75 28 73 57 28
951
2022/12/15 11:33
加载中...