Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdlib>
- #include <iostream>
- #include <stdio.h>
- #include <cstring>
- #include <vector>
- #include <algorithm>
- #include <utility>
- #include <queue>
- #include <map>
- #include <stack>
- #include <cmath>
- #include <set>
- #define INF 99999999
- #define rep(i, a, b) for (int i = int(a); i < int(b); i++)
- #define TRvii(c, it) for (vii::iterator it = (c).begin(); it != (c).end(); it++)
- #define tr(it, s) for ( typeof ( s.begin( ) ) it=s.begin( ); it!=s.end( ); it++ )
- #define pb push_back
- #define clr(a) memset((a),0,sizeof(a))
- #define pi 3.1415926535897932384626433832795028841971
- using namespace std;
- typedef long long ll;
- typedef pair < int, int > ii;
- typedef vector < int > vi;
- typedef vector < ii > vii;
- int mi[1000010];
- int main(){
- int n, v[26], sum, cases;
- while(scanf("%d",&cases) != EOF){
- while(cases--){
- scanf("%d%d",&n,&sum);
- for(int i=0; i<=sum; i++)
- mi[i]=INF; // minimo de moeda para o iesimo valor = INF
- mi[0]=0; // 0 moedas p ter soma = 0
- for(int i=0; i<n; i++){
- scanf("%d",&v[i]); //le todos valores de moedas
- }
- for(int i=1; i<=sum; i++){ // itera da soma 1 até a pedida
- for(int j=0; j<n; j++){ // itera por todas moedas
- if(v[j] <= i && mi[i-v[j]]+1 < mi[i]){ // se o tam da moeda atual <= que a capacidade atual E
- mi[i] = mi[i-v[j]]+1; // o minimo da soma atual - o valor da moeda atual for < que a qtdade atual
- // break; //atualiza.
- }
- }
- }
- printf("%d\n",mi[sum]);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment