MagicScaring

HDU2079

Dec 27th, 2017
275
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.94 KB | None | 0 0
  1. #include <iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. using namespace std;
  5. #define M 40
  6. #define N 10
  7. #define MS(x) memset(x,0,sizeof(x))
  8. int n,m;
  9. int num[N+1],val[N+1];
  10. int c1[M+1],c2[M+1];
  11. void solve()
  12. {
  13.     MS(c1);
  14.     MS(c2);
  15.     int i,j,k;
  16.     for(i=0;i<=num[1]*val[1];i+=val[1])
  17.         c1[i]=1;
  18.     for(i=2;i<=n;++i)
  19.     {
  20.         for(j=0;j<=m;++j)
  21.         {
  22.             for(k=0;k+j<=m&&k<=num[i]*val[i];k+=val[i])
  23.             {
  24.                 c2[k+j]+=c1[j];
  25.             }
  26.         }
  27.         for(j=0;j<=m;++j)
  28.         {
  29.             c1[j]=c2[j];
  30.             c2[j]=0;
  31.         }
  32.     }
  33. }
  34. int main()
  35. {
  36.     int i,j,t;
  37.     scanf("%d",&t);
  38.     while(t--)
  39.     {
  40.         int k;
  41.         MS(num);
  42.         MS(val);
  43.         scanf("%d%d",&m,&n);
  44.         for(i=1;i<=n;++i)
  45.         scanf("%d%d",&val[i],&num[i]);
  46.         solve();
  47.         printf("%d\n",c1[m]);
  48.     }
  49.   //  cout << "Hello world!" << endl;
  50.     return 0;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment