Advertisement
Caio_25

Troco Spoj

May 2nd, 2019
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.17 KB | None | 0 0
  1. #include<stdio.h>
  2.  
  3. int pd[1001] [100001];
  4. int vet[1001];
  5.  
  6. int troco(int n, int v);
  7. int maior(int a, int b);
  8. void inicializar(int m, int v);
  9.  
  10.  
  11. int main()
  12. {
  13.   int v,m;
  14.   scanf("%d %d", &v, &m);
  15.  
  16.   inicializar(m, v);
  17.   for(int i = 1; i <= m; i++)
  18.   {
  19.     scanf("%d", &vet[i]);
  20.  
  21.   }
  22.  
  23.   if(troco(m, v) == 1)
  24.   {
  25.     printf("S\n");
  26.   }
  27.  
  28.   else
  29.   {
  30.     printf("N\n");
  31.   }
  32.  
  33.  
  34. }
  35.  
  36. int troco(int n, int v)
  37. {
  38.  
  39.   if(v == 0)
  40.   {
  41.     return(1);
  42.   }
  43.  
  44.   if(n <= 0)
  45.   {
  46.     return(0);
  47.   }
  48.  
  49.  
  50.   if(pd[n][v] == -1)
  51.   {
  52.     if(pd[n-1][v] == -1)
  53.     {
  54.       pd[n-1][v] = troco(n-1, v);
  55.     }
  56.  
  57.     if(vet[n] <= v)
  58.     {
  59.       if(pd[n-1][v-vet[n]] == -1)
  60.       {
  61.         pd[n-1][v-vet[n]] = troco(n-1, v-vet[n]);
  62.       }
  63.  
  64.       pd[n][v] = maior(pd[n-1][v],pd[n-1][v-vet[n]]);
  65.  
  66.     }
  67.  
  68.     else
  69.     {
  70.       pd[n][v] = pd[n-1][v];
  71.  
  72.     }
  73.    
  74.  
  75.   }
  76.  
  77.  
  78.     return(pd[n][v]);
  79.  
  80. }
  81.  
  82.  
  83. int maior(int a, int b)
  84. {
  85.   if(a > b)
  86.   {
  87.     return a;
  88.   }
  89.  
  90.   else
  91.   {
  92.     return b;
  93.   }
  94. }
  95.  
  96. void inicializar(int m, int v)
  97. {
  98.     for(int i = 0; i <= m; i++)
  99.     {
  100.       for(int j = 0; j <= v; j++)
  101.       {
  102.         pd[i][j] = -1;
  103.       }
  104.     }
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement