Chia của
Submit solution
Points:
2
Time limit:
1.0s
Memory limit:
1000M
Author:
Problem type
Allowed languages
Ada, Assembly, Awk, C, C++, C11, CLANG, CLANGX, Classical, COBOL, Coffee, CSC, D lang, DART, F95, FORTH, Fortrn, GAS32, GO, Haskell, Itercal, Java, kotlin, LEAN, LISP, LUA, MONOVB, Nasm, OCAML, Pascal, Perl, php, PIKE, prolog, Pypy, Python, Ruby 2, RUST, Scala, SCM, SED, SWIFT, TCL, TUR, V8JS, VB, ZIG
Một ông bố có n tài sản có giá trị lần lượt là a1,a2,…,an. Ông chỉ có hai người con ông muốn đem chia n tài sản này cho 2 người con sao cho chênh lệch giữa 2 người là ít nhất có thể.
Input
Dòng thứ nhất số nguyên dương n là tài sản ( 1 ≤ n ≤ 20)
Dòng thứ hai chứa n số nguyên dương có giá trị tuyệt đối không quá 10^4
Output
Một số nguyên là độ chênh ít nhất có thể của hai người con
Example 1
Input
3
8 4 6
Output
2
Giải thích: Một người nhận 8 một người nhận 4+6=10 nên chênh lệch ít nhất 2
Example 2
Input
5
10 7 9 6 6
Output
0
Giải thích: Một người nhận 10+9 =19 một người nhận 7+6+6=19 nên chênh lệch ít nhất 0
Comments
include<bits/stdc++.h>
using namespace std;
int n, res = 1e6; vector<int> b(21); vector<int> a(21);
void check() { int s1 = 0, s2 = 0; for (int i = 1; i <= n; i++) { if (b[i] == 0) s1 += a[i]; else s2 += a[i]; } res = min(res, abs(s1 - s2)); }
void backtrack(int t) { if (t == n+1) { check(); return; } for (int i = 0; i <= 1; i++) { b[t] = i; backtrack(t+1); } }
int main() { cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; } backtrack(1); cout << res; }
include<bits/stdc++.h>