Advertisement
Guest User

Untitled

a guest
Aug 9th, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.06 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <list>
  5. #define infinito 1100000000
  6. #define MAXN 550
  7. using namespace std;
  8. int N;
  9. int vettore[MAXN];
  10.  
  11. int ricorsiva(int v[], int quanti, int minimo)
  12. {
  13.     if(quanti == 1)
  14.         return minimo;
  15.        
  16.     int localMin = infinito;
  17.     int cont = 0;
  18.    
  19.     for(int i = 0; i < N; i++)
  20.     {
  21.         if(v[i] == infinito)
  22.             continue;
  23.         cont++;
  24.  
  25.         if(cont == quanti)
  26.             break;
  27.        
  28.         int a = v[i];
  29.         int b = infinito;
  30.         int temp = 0;
  31.         while(b == infinito)
  32.         {
  33.             temp++;
  34.             b = v[i+temp];
  35.         }
  36.        
  37.         int pos_a = i, pos_b = i + temp;
  38.         int somma = a+b;
  39.         int costo = somma > 0 ? somma : -somma;
  40.         v[pos_a] = somma, v[pos_b] = infinito;
  41.         localMin = min(localMin, ricorsiva(v, quanti - 1, max(minimo, costo)));
  42.         v[pos_a] = a, v[pos_b] = b;
  43.  
  44.     }
  45.    
  46.     return localMin;
  47. }
  48.  
  49.  
  50. int main()
  51. {
  52.     FILE *in, *out;
  53.     in = freopen("input.txt", "r", stdin);
  54.     out = freopen("output.txt", "w", stdout);
  55.     scanf("%d", &N);
  56.     for(int i = 0; i < N; i++)
  57.         scanf("%d", &vettore[i]);
  58.  
  59.     printf("%d", ricorsiva(vettore, N, 0));
  60.  
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement