Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdio.h>
- #include <stdlib.h>
- #include <list>
- #define infinito 1100000000
- #define MAXN 550
- using namespace std;
- int N;
- int vettore[MAXN];
- int ricorsiva(int v[], int quanti, int minimo)
- {
- if(quanti == 1)
- return minimo;
- int localMin = infinito;
- int cont = 0;
- for(int i = 0; i < N; i++)
- {
- if(v[i] == infinito)
- continue;
- cont++;
- if(cont == quanti)
- break;
- int a = v[i];
- int b = infinito;
- int temp = 0;
- while(b == infinito)
- {
- temp++;
- b = v[i+temp];
- }
- int pos_a = i, pos_b = i + temp;
- int somma = a+b;
- int costo = somma > 0 ? somma : -somma;
- v[pos_a] = somma, v[pos_b] = infinito;
- localMin = min(localMin, ricorsiva(v, quanti - 1, max(minimo, costo)));
- v[pos_a] = a, v[pos_b] = b;
- }
- return localMin;
- }
- int main()
- {
- FILE *in, *out;
- in = freopen("input.txt", "r", stdin);
- out = freopen("output.txt", "w", stdout);
- scanf("%d", &N);
- for(int i = 0; i < N; i++)
- scanf("%d", &vettore[i]);
- printf("%d", ricorsiva(vettore, N, 0));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement