题目描述:
暑期一共 N 天,好心人小涛想给大家买汽水,小涛最多只能给大家花 M 元钱。由于每天汽水的价格都不固定,现在给出每天买汽水的花销,我们可以随意选择让小涛哪些天买汽水(当然总花费不能超过 M )。请问最多一共能够花掉小涛多少钱呢?
输入样例:
3 10
1 2 3
输出样例:
6
AC代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
const int N = 45;
int a[N], c[N], n, m, Ans, mx = 0x3f3f3f3f;
bool vis[N];
void Dfs(const int &k, const int &lst, const int &w)
{
int tmp = w + c[lst + 1];
if (tmp <= Ans || w > m) return;
if (tmp <= m && tmp >= Ans) return (void)(Ans = tmp);
if (w > Ans) Ans = w;
if (k > n || m - w < mx) return ;
for (int i = lst + 1; i <= n; ++i)
Dfs(k + 1, i, w + a[i]);
}
inline bool cmp(const int &x, const int &y)
{
return x > y;
}
int main()
{
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);
sort(a + 1, a + n + 1, cmp);
for (int i = n; i >= 1; --i)
{
c[i] = c[i + 1] + a[i];
if (mx > c[i]) mx = c[i];
}
Dfs(1, 0, 0);
printf("%d\n", Ans);
return 0;
}
求赞❤
...(((m -__-)m┏┛赞┗┓