Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <iostream>
- #include <string.h>
- #include <vector>
- #include <ctime>
- #include <cstdlib>
- #include <cmath>
- using namespace std;
- int N,presupuesto,prendas,K;
- bool flagg=0;
- vector< vector< int > > memo;
- vector< vector< int > > precios;
- int wedding(int opcion,int plata)
- {
- //if(!plata && !opcion)
- // return 0;
- //cout<<"plata:"<<plata<<endl;
- if(opcion==-1)
- {
- //if(!plata)
- // return ;
- //cout<<"plata:"<<plata<<endl;
- flagg=1;
- return plata;
- }
- if(memo[opcion][plata]!=-1)
- return memo[opcion][plata];
- int resto=plata,ans;
- for(int i=0;i<precios[opcion].size();i++)
- {
- if(plata>=precios[opcion][i])
- {
- ans=wedding(opcion-1,plata-precios[opcion][i]);
- if(ans<resto)
- resto=ans;
- }
- }
- memo[opcion][plata]=resto;
- //cout<<"resto:"<<resto<<endl;
- return resto;
- }
- int main()
- {
- scanf("%d",&N);
- for (int i = 0; i < N; ++i)
- {
- scanf("%d %d",&presupuesto,&prendas);//la plata y las prendas que hay que comprar
- //printf("presupuesto:%d y prendas:%d\n",presupuesto,prendas);
- precios.resize(prendas);
- memo.resize(prendas);
- for (int j = 0; j < prendas; ++j)
- {
- scanf("%d",&K);
- //cout<<"cantidad por items:"<<K<<endl;
- memo[j].resize(presupuesto+1);
- memo[j].assign(presupuesto+1,-1);
- precios[j].resize(K);
- for (int k = 0; k < K; ++k)
- {
- scanf("%d",&precios[j][k]);
- //cout<<precios[j][k]<<" ";
- }
- //cout<<endl;
- }
- int solucion=wedding(prendas-1,presupuesto);
- if(flagg)
- printf("%d\n",presupuesto-solucion);
- else
- printf("no solution\n");
- flagg=0;
- precios.clear();
- memo.clear();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement