GastonFontenla

Untitled

May 27th, 2016
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.92 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define max(a, b) ((a > b) ? a : b)
  5. #define min(a, b) ((a < b) ? a : b)
  6.  
  7. int m[101][50001];
  8. int a[101];
  9.  
  10. int main()
  11. {
  12.     int tc, i, j;
  13.     scanf("%d\n", &tc);
  14.     while(tc--)
  15.     {
  16.         int n, sum = 0, maxDif = 999999999;
  17.         scanf("%d\n", &n);
  18.         for(i=1; i<=n; i++)
  19.         {
  20.             scanf("%d", &a[i]);
  21.             sum += a[i];
  22.         }
  23.  
  24.         for(i=0; i<sum+1; i++)
  25.             m[0][i] = 0;
  26.  
  27.         for(i=1; i<=n; i++)
  28.         {
  29.             for(j=0; j<sum+1; j++)
  30.             {
  31.                 if(a[i] <= j)
  32.                     m[i][j] = max(a[i]+m[i-1][j-a[i]], m[i-1][j]);
  33.                 else
  34.                     m[i][j] = m[i-1][j];
  35.  
  36.                 maxDif = min(maxDif, abs(sum-2*m[i][j]));
  37.             }
  38.         }
  39.  
  40.         if(maxDif == 999999999)
  41.             maxDif = 0;
  42.  
  43.         printf("%d\n", maxDif);
  44.     }
  45.     return 0;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment