[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); }
浙公网安备 33010602011771号