萌新袜子初学dp样例没过
查看原帖
萌新袜子初学dp样例没过
912248
FuckYouJinhai楼主2023/5/6 21:20
#include<bits/stdc++.h>
using namespace std;

int n,a[30],m,ans;
bool dp[3000],vis[30];

void _dp(){
    memset(dp,0,sizeof(dp));
    dp[0]=1;
    int tot=0,res=0;
    for(int i=0;i<n;++i){
        if(vis[i])
            continue;
        for(int j=tot;j>=0;--j)
            if(dp[j]&&!dp[tot+a[i]]){
                dp[tot+a[i]]=1;
                res++;
            }
        tot+=a[i];
    }
    ans=max(ans,res);
}

void dfs(int i,int cnt){
    if(cnt>m)
        return;
    if(i==n){
        if(cnt==m)
            _dp();
        return;
    }
    dfs(i+1,cnt);
    vis[i]=1;
    dfs(i+1,cnt+1);
    vis[i]=0;
}

int main(){
    cin>>n>>m;
    for(int i=0;i<n;++i)
        cin>>a[i];
    dfs(0,0);
    cout<<ans;
    return 0;
}
2023/5/6 21:20
加载中...