#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1007;
int n, c, val[maxn];
ll pre_sum[maxn], max_Ans;
void dfs(int m, long long cnow) {
if (cnow + pre_sum[m - 1] <= c) {
max_Ans = max(max_Ans, cnow + pre_sum[m - 1]);
return;
}
if (cnow + pre_sum[m - 1] < max_Ans)return;
for (int i = m - 1; i >= 1; i--) {
if (cnow + val[i] > c)continue;
dfs(i, cnow + val[i]);
}
return;
}
int main() {
freopen("P5194_3.in", "r", stdin);
cin >> n >> c;
long long sum = 0;
for (int i = 1; i <= n; i++) {
cin >> val[i];
pre_sum[i] = pre_sum[i - 1] + val[i];
sum += val[i];
}
dfs(n + 1, 0);
cout << max_Ans;
}
用了#4和#6的数据测试
#4
ans:1007965426
my output:1007965425
#6
ans:1054172650
my output:1054172649
每次都差1 但是不知道问题出在哪了 求大佬帮助