WA 20分
  • 板块P1441 砝码称重
  • 楼主LiaoYF1
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/12/15 10:30
  • 上次更新2023/10/24 07:40:14
查看原帖
WA 20分
633466
LiaoYF1楼主2022/12/15 10:30
#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>=1;j--){
            f[j]=f[j]||f[j-a[i]];
        }
    }
    int res=0;
    for(int i=sum;i>=1;i--){
        if(f[i]){
            res++;
        }
    }
    return res;
}
void dfs(int x,int k){
    if(k>m||x>n)return;
    if(x==n&&k==m){
        ans=max(ans,dp());
        return;
    }
    d[k]=1;
    dfs(x+1,k+1);
    d[k]=0;
    dfs(x+1,k);
}

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;
}
2022/12/15 10:30
加载中...