trong buổi sinh hoạt lớp ngoài trời của lớp,cô giáo muốn chia cả lớp thành hai đội để chơi kéo co
Yêu cầu:hãy giúp cô giá tìm cách chia nhóm sao cho công bằng nhất theo cả hai tiêu chí sau
1.số lượng thành viên của hai nhóm chênh lệch nhau không quá 1
2.sự chênh lệch giữa tổng khối lượng các thành viên trong nhóm là ít nhất
Vd: input: 3
100 90 200
output:190 200.
C++ ạ
Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
#include <bits/stdc++.h>
#define ll long long
#define str string
#define FAST ios::sync_with_stdio(0);cin.tie(0);
#define MAXN 1000000
using namespace std;
int main() {
FAST
ll n,t=0;
cin>>n;
vector<ll> a(n);
for (ll & x:a)
cin>>x,t+=x;
bitset<MAXN> dp;
dp[0]=1;
for (ll x:a) dp|=dp<<x;
ll res=t/2;
while (!dp[res])
res--;
cout<<res<<' '<<t-res;
return 0;
}
Hãy giúp mọi người biết câu trả lời này thế nào?
`$\color{#8E1E20}{Rai}\color{#B6292B}{den}$ $\color{#C82E31}{Sho}\color{#E33539}{gun}$'
#include <bits/stdc++.h>
#define N 20
using namespace std;
int n, a[N], s, r = 1e9;
void f(int i, int t, int c) {
if (c > (n + 1) / 2) return;
if (i == n) {
if (abs(n - 2 * c) <= 1) r = min(r, abs(s - 2 * t));
return;
}
f(i + 1, t + a[i], c + 1);
f(i + 1, t, c);
}
int main() {
cin >> n;
for (int i = 0; i < n; i++) cin >> a[i], s += a[i];
f(0, 0, 0);
cout << (s - r) / 2 << ' ' << (s + r) / 2;
}
Hãy giúp mọi người biết câu trả lời này thế nào?
Bảng tin