社区讨论
抽象代码求调
P10484送礼物参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lzqoqiei
- 此快照首次捕获于
- 2024/08/12 15:41 2 年前
- 此快照最后确认于
- 2024/08/12 16:30 2 年前
CPP
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n, w, g[101];
vector <ll> a, b;
void dfs1(int i, ll v, int l, int r) {
if (v > w) return ;
if (i == r + 1) {
a.push_back(v);
return ;
}
dfs1(i + 1, v + g[i], l, r);
dfs1(i + 1, v, l, r);
}
void dfs2(int i, ll v, int l, int r) {
if (v > w) return ;
if (i == r + 1) {
b.push_back(v);
return ;
}
dfs2(i + 1, v + g[i], l, r);
dfs2(i + 1, v, l, r);
}
int main() {
cin >> w >> n;
for (int i = 1; i <= n; i++) cin >> g[i];
int m = n / 2;
dfs1(1, 0, 1, m);
dfs2(m + 1, 0, m + 1, n);
sort(b.begin(), b.end());
ll maxx = -1;
for (int i = 0; i < a.size(); i ++) {
int l = 0, r = b.size(), mid; ll ans = INT_MAX;
while (l <= r) {
mid = (l + r + 1) >> 1;
ans = min(ans, abs(w - (a[i] + b[mid])));
if (w >= a[i] + b[mid]) {
l = mid + 1;
}else {
r = mid - 1;
}
}
maxx = max(maxx, ans + a[i]);
}
cout << maxx ;
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...