MagicScaring

HDU1085

Dec 27th, 2017
322
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.25 KB | None | 0 0
  1. #include <iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. using namespace std;
  5. #define M 8000
  6. #define N 1000
  7. int num[3];
  8. int c1[M+1],c2[M+1];
  9. int dis[]={1,2,5};
  10. int a,b,c,sum;      //分别代表1元,2元,5元硬币的个数
  11. void solve()
  12. {
  13.     memset(num,0,sizeof(num));
  14.     memset(c1,0,sizeof(c1));
  15.     memset(c2,0,sizeof(c1));
  16.     num[0]=a;
  17.     num[1]=b;
  18.     num[2]=c;
  19.     int i,j,k;
  20.     for(i=0;i<=dis[0]*num[0];i++)
  21.      c1[i]=1;
  22.     for(i=1;i<3;++i)
  23.     {
  24.         for(j=0;j<=sum;++j)
  25.         {
  26.             for(k=0;k+j<=sum&&k<=num[i]*dis[i];k+=dis[i])
  27.             {
  28.                 c2[k+j]+=c1[j];
  29.             }
  30.         }
  31.         for(j=0;j<=sum;++j)
  32.         {
  33.             c1[j]=c2[j];
  34.             c2[j]=0;
  35.         }
  36.     }
  37. }
  38. int main()
  39. {
  40.     while(scanf("%d%d%d",&a,&b,&c)!=EOF&&(a||b||c))
  41.     {
  42.         int i;
  43.         bool flag=false;
  44.         sum=1*a+2*b+5*c;
  45.         solve();
  46.         for(i=1;i<=sum;++i)
  47.         {
  48.             if(!c1[i])
  49.             {
  50.                 flag=true;
  51.                 break;
  52.             }
  53.         }
  54.         if(flag)
  55.             printf("%d\n",i);
  56.         else
  57.             printf("%d\n",sum+1);
  58.            // printf("%d=%d\n",i,c1[i]);
  59.     }
  60.   //  cout << "Hello world!" << endl;
  61.     return 0;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment