求助,样例没过,谢谢大佬了
查看原帖
求助,样例没过,谢谢大佬了
546830
XSean楼主2022/11/9 20:15
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1010, M = 10010;
ll n, C;
ll a[N];
ll s1[M], s2[M], cnt1, cnt2; 
void dfs(int l, int r, ll s, ll v[], ll &cnt){
	if(s > C) return;
	if(l > r){
		v[++cnt] = s;
		return;
	}
	dfs(l + 1, r, s, v, cnt);
	dfs(l + 1, r, s + a[l], v, cnt);
}
int main(){
	cin >> n >> C;
	for(int i = 1; i <= n; i++){
		cin >> a[i];
	}
	dfs(1, n / 2, 0, s1, cnt1);
	dfs(n / 2 + 1, n, 0, s2, cnt2);/*note !*/
	sort(s1 + 1, s1 + 1 + cnt1);
	sort(s2 + 1, s2 + 1 + cnt2);
	ll maxa = -1;
	for(int i = 1; i <= cnt2; i++){
		int t = C - s2[i];
		ll *p = upper_bound(s1 + 1, s1 + 1 + cnt2, t) - 1;
		maxa = max(maxa, *p); 
	}
	cout << maxa << endl;
	return 0;
}

我借鉴了https://www.luogu.com.cn/blog/HPXXZYY-YingyeZhu/solution-p5194,改了一些,帮忙看看哪里错了,谢谢了

2022/11/9 20:15
加载中...