POJ 3172 (认真读题的题)

题目:
这里写图片描述
这里写图片描述
思路:

题目很有意思

首先 题里说: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);
}

这里写图片描述

原文地址:https://www.cnblogs.com/SiriusRen/p/6532199.html