[YbtOJ Dfs] 最大费用

题目描述

商场一共 n 个物品,第 i件物品的价格为 a_i ,每件物品只能买一件,你手上有 m 块钱。
求最多支出多少钱。

输入格式

第一行两个整数 n,m
接下来 n 个整数,表示 a_i

输出格式

输出最多支出是多少钱。

样例

样例 1 输入

3 10
1 2 3

样例 1 输出

6

样例 2 输入

4 10
4 3 5 11

样例 2 输出

9

数据范围与提示

对于 10\% 的数据, n\leq 10
对于 30\% 的数据, n\leq 20
对于 60\% 的数据, n\leq 30
对于 100\% 的数据, 1\leq n\leq 40


标程

#include <bits/stdc++.h>
using namespace std;
const int maxn=1.3e6;
int n,m,v,u,a[maxn],b[2],c[2][maxn];

void dfs(int bo,int x,int t,int s) {
    //所有的价值组合
    if(x>t) {
        c[bo][++b[bo]]=s;
        return;
    }
    dfs(bo,x+1,t,s);
    dfs(bo,x+1,t,s+a[x]);
}
int main() {
    cin>>n>>m;
    u=n>>1;
    for(int i=1; i<=u; i++)cin>>a[i];
    dfs(0,1,u,0);
    v=n-u;
    for(int i=1; i<=v; i++)cin>>a[i];
    dfs(1,1,v,0);
    sort(c[1]+1,c[1]+b[1]+1);
    int ans=0;
    for(int i=1; i<=b[0]; i++) {
        int x=upper_bound(c[1]+1,c[1]+b[1]+1,m-c[0][i])-c[1]-1;
        ans=max(ans,c[0][i]+c[1][x]);
    }
    cout<<ans<<endl;
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容