Advertisement
Gustavo_Inzunza

Wedding shopping

May 19th, 2013
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.61 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <string.h>
  4. #include <vector>
  5. #include <ctime>
  6. #include <cstdlib>
  7. #include <cmath>
  8. using namespace std;
  9. int N,presupuesto,prendas,K;
  10. bool flagg=0;
  11. vector< vector< int > > memo;
  12. vector< vector< int > > precios;
  13. int wedding(int opcion,int plata)
  14. {
  15.     //if(!plata && !opcion)
  16.     //  return 0;
  17.     //cout<<"plata:"<<plata<<endl;
  18.     if(opcion==-1)
  19.     {
  20.         //if(!plata)
  21.         //  return ;
  22.         //cout<<"plata:"<<plata<<endl;
  23.         flagg=1;
  24.         return plata;
  25.     }
  26.     if(memo[opcion][plata]!=-1)
  27.         return memo[opcion][plata];
  28.     int resto=plata,ans;
  29.     for(int i=0;i<precios[opcion].size();i++)
  30.     {
  31.         if(plata>=precios[opcion][i])
  32.         {
  33.             ans=wedding(opcion-1,plata-precios[opcion][i]);
  34.             if(ans<resto)
  35.                 resto=ans;
  36.         }
  37.     }
  38.     memo[opcion][plata]=resto;
  39.     //cout<<"resto:"<<resto<<endl;
  40.     return resto;
  41. }
  42. int main()
  43. {
  44.     scanf("%d",&N);
  45.     for (int i = 0; i < N; ++i)
  46.     {
  47.         scanf("%d %d",&presupuesto,&prendas);//la plata y las prendas que hay que comprar
  48.         //printf("presupuesto:%d y prendas:%d\n",presupuesto,prendas);
  49.         precios.resize(prendas);
  50.         memo.resize(prendas);
  51.         for (int j = 0; j < prendas; ++j)
  52.         {
  53.             scanf("%d",&K);
  54.             //cout<<"cantidad por items:"<<K<<endl;
  55.             memo[j].resize(presupuesto+1);
  56.             memo[j].assign(presupuesto+1,-1);
  57.             precios[j].resize(K);
  58.             for (int k = 0; k < K; ++k)
  59.             {
  60.                 scanf("%d",&precios[j][k]);
  61.                 //cout<<precios[j][k]<<" ";
  62.             }
  63.             //cout<<endl;
  64.         }
  65.         int solucion=wedding(prendas-1,presupuesto);
  66.         if(flagg)
  67.             printf("%d\n",presupuesto-solucion);
  68.         else
  69.             printf("no solution\n");
  70.         flagg=0;
  71.         precios.clear();
  72.         memo.clear();
  73.     }
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement