比赛 SBOI2022暑假快乐赛① 评测结果 AWTTTTTTT
题目名称 送礼物 最终得分 11
用户昵称 该账号已注销 运行时间 28.265 s
代码语言 C++ 内存使用 5.10 MiB
提交时间 2022-06-25 09:57:57
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int w,n,g[50],maxn=0,ans=0,p=0;
bool v[50]={0};
int dfs(int x,int u)
{
    if(x==n)
    {
        maxn=max(maxn,u);
        return 0;
    }
    for(int i=x+1;i<=n;i++)
    {
        if(v[i]==0)
        {
            if(g[i]+u<=w)
            {
                v[i]=1;
                dfs(i,g[i]+u);
                v[i]=0;
            }
            else
            {
                v[i]=1;
                dfs(i,u);
                v[i]=0;
            }
        }
    }
    return 0;
}
int main(){
    freopen("giftgiving.in","r",stdin);
    freopen("giftgiving.out","w",stdout);
    cin>>w>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>g[i];
        p=max(p,g[i]);
    }
    if(p==w)
    {
        cout<<p<<endl;
        return 0;
    }
    sort(g,g+n+1);
    for(int i=1;i<=n;i++)
    {
        if(g[i]<w)
        {
            v[i]=1;
            dfs(i,g[i]);
            ans=max(ans,maxn);
            v[i]=0;
        }
    }
    cout<<ans<<endl;
    return 0;
}