Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- using namespace std;
- void sets(int& min, int i, int n, int grupo0, int grupo1, int& boundGrupo0, int boundGrupo1, const vector<int>& v) {
- if(grupo0 > boundGrupo0 || grupo1 > boundGrupo1) {
- return;
- }
- if (i == n) {
- if(grupo0 >= grupo1) {
- boundGrupo0 = grupo0;
- if(grupo0-grupo1 < min) {
- min = grupo0-grupo1;
- }
- }
- } else {
- sets(min, i+1, n, grupo0+v[i], grupo1, boundGrupo0, boundGrupo1, v);
- sets(min, i+1, n, grupo0, grupo1+v[i], boundGrupo0, boundGrupo1, v);
- }
- }
- int main() {
- int n;
- while(cin >> n) {
- vector<int> v(n);
- int max = 0;
- for(int i = 0; i < n; ++i) {
- cin >> v[i];
- max += v[i];
- }
- int min = max;
- int boundGrupo0 = max;
- sets(min, 0, n, 0, 0, boundGrupo0, max/2, v);
- cout << min << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement