[USACO05DEC]Scales S

dfs+剪枝

#include<stdio.h>
#include<algorithm>
using namespace std;
typedef long long ll;
ll f[1007],s[1007];
ll ans=0;
int n;
ll c;
void dfs(int index,ll x)
{
    if(x>c)
        return ;
    if(x+s[index]<ans)
        return;
    ans=max(ans,x);
    if(index==0)
        return;
    dfs(index-1,x+f[index]);
    dfs(index-1,x);
}
int main()
{
    scanf("%d %lld",&n,&c);
    for(int i=1;i<=n;i++)
    {
        scanf("%lld",&f[i]);
        s[i]=s[i-1]+f[i];
    }
    dfs(n,0);
    printf("%lld\n",ans);
}

 

posted @ 2021-07-16 15:06  废柴废柴少女  阅读(29)  评论(0)    收藏  举报