题目:
思路:
题目很有意思
首先 题里说:N<=1000 题里又说
诶呦 woc? 这不自相矛盾嘛 最坏情况也就是个 斐波那契数列 几十个数 暴搜+剪枝不就好了嘛
剪枝:从大往小搜,如果前缀和+当前的和<=当前解 return
(这正确性很显然 但是不是很好想到)
//By SiriusRen
#include <cstdio>
using namespace std;
int n,k,ans,a[55],sum[55];
void dfs(int rec,int x){
if(x>ans)ans=x;
if(rec<=0)return;
for(int i=rec;i;i--)
if(x+a[i]<=k&&sum[i]+x>ans)dfs(i-1,x+a[i]);
}
int main(){
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)scanf("%d",&a[i]),sum[i]=sum[i-1]+a[i];
dfs(n,0);
printf("%d
",ans);
}