damihenrique

Untitled

Apr 24th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.99 KB | None | 0 0
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <stdio.h>
  4. #include <cstring>
  5. #include <vector>
  6. #include <algorithm>
  7. #include <utility>
  8. #include <queue>
  9. #include <map>
  10. #include <stack>
  11. #include <cmath>
  12. #include <set>
  13.  
  14. #define INF 99999999
  15. #define rep(i, a, b) for (int i = int(a); i < int(b); i++)
  16. #define TRvii(c, it) for (vii::iterator it = (c).begin(); it != (c).end(); it++)
  17. #define tr(it, s)  for ( typeof ( s.begin( ) ) it=s.begin( ); it!=s.end( ); it++ )
  18. #define pb push_back
  19. #define clr(a) memset((a),0,sizeof(a))
  20. #define pi 3.1415926535897932384626433832795028841971
  21.  
  22. using namespace std;
  23.  
  24. typedef long long ll;
  25. typedef pair < int, int >  ii;
  26. typedef vector < int >  vi;
  27. typedef vector < ii >  vii;
  28.  
  29. int mi[1000010];
  30.  
  31. int main(){
  32.  
  33.      int n, v[26], sum, cases;
  34.      
  35.      while(scanf("%d",&cases) != EOF){
  36.          
  37.          while(cases--){
  38.      
  39.                    scanf("%d%d",&n,&sum);
  40.                    
  41.                    for(int i=0; i<=sum; i++)
  42.                       mi[i]=INF;   // minimo de moeda para o iesimo valor = INF
  43.          
  44.                    mi[0]=0; // 0 moedas p ter soma = 0
  45.          
  46.                    for(int i=0; i<n; i++){
  47.                          scanf("%d",&v[i]);  //le todos valores de moedas
  48.                    }
  49.          
  50.                    for(int i=1; i<=sum; i++){  // itera da soma 1 até a pedida
  51.                           for(int j=0; j<n; j++){   // itera por todas moedas
  52.                              if(v[j] <= i && mi[i-v[j]]+1 < mi[i]){ // se o tam da moeda atual <= que a capacidade atual E
  53.                                    mi[i] = mi[i-v[j]]+1;           // o minimo da soma atual - o valor da moeda atual for < que a qtdade atual
  54.                                   // break;                                //atualiza.
  55.                              }
  56.                          }
  57.                    }
  58.  
  59.                      printf("%d\n",mi[sum]);
  60.        
  61.                }
  62.            
  63.      }
  64.  
  65.  
  66.     return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment