Advertisement
Guest User

1231

a guest
Mar 14th, 2013
2,000
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.70 KB | None | 0 0
  1. /*
  2.  *  Shafaetsplanet.com
  3.  */
  4. #include <algorithm>
  5. #include <bitset>
  6. #include <cctype>
  7. #include <cmath>
  8. #include <cstdio>
  9. #include <cstdlib>
  10. #include <cstring>
  11. #include <ctime>
  12. #include <deque>
  13. #include <fstream>
  14. #include <iostream>
  15. #include <list>
  16. #include <map>
  17. #include <queue>
  18. #include <set>
  19. #include <sstream>
  20. #include <stack>
  21. #include <string>
  22. #include <utility>
  23. #include <vector>
  24.  
  25. #define stream istringstream
  26. #define rep(i,n) for(int i=0; i<(int)n; i++)
  27. #define repv(i,n) for(int i=n-1; i>=0; i--)
  28. #define repl(i,n) for(int i=1; i<=(int)n; i++)
  29. #define replv(i,n) for(int i=n; i>=1; i--)
  30.  
  31.  
  32. #define INF (1<<28)
  33. #define PI 3.14159265358979323846264338327950
  34. #define pb(x) push_back(x)
  35. #define ppb pop_back
  36. #define all(x) x.begin(),x.end()
  37. #define mem(x,y) memset(x,y,sizeof(x));
  38. #define eps 1e-9
  39. #define pii pair<int,int>
  40. #define pmp make_pair
  41.  
  42.  
  43. #define sdi(x) scanf("%d",&x)
  44. #define sdii(x,y) scanf("%d%d",&x,&y)
  45. #define SDs(x) scanf("%s",x)
  46. #define uu first
  47. #define vv second
  48.  
  49. using namespace std;
  50.  
  51. template<class T> inline T gcd(T a,T b) {if(a<0)return
  52. gcd(-a,b);if(b<0)return gcd(a,-b);return (b==0)?a:gcd(b,a%b);}
  53. template<class T> inline T lcm(T a,T b) {if(a<0)return
  54. lcm(-a,b);if(b<0)return lcm(a,-b);return a*(b/gcd(a,b));}
  55. template<class T> inline T sqr(T x){return x*x;}
  56. template<class T> T power(T N,T P){ return (P==0)?  1: N*power(N,P-1); }
  57.  
  58. typedef long long i64;
  59. typedef unsigned long long ui64;
  60.  
  61. #define READ(f) freopen(f, "r", stdin)
  62. #define WRITE(f) freopen(f, "w", stdout)
  63.  
  64. //bool operator < ( const node& p ) const {      return dist > p.dist;   }
  65.  
  66. int fx[]={0,0,-1,+1,-1,-1,+1,+1};
  67. int fy[]={-1,+1,0,0,-1,+1,-1,+1};
  68.  
  69. int Set(int N,int pos){return N=N | (1<<pos);}
  70. int Reset(int N,int pos){return N= N & ~(1<<pos);}
  71. int check(int N,int pos){return (N & (1<<pos));}
  72. int toggle(int N,int pos){if(check(N,pos))return N=Reset(N,pos);return N=Set(N,pos);}
  73. void PBIT(int N){   printf("("); for(int i=10;i>=0;i--) {bool x=check(N,i);cout<<x;}    puts(")");}
  74.  
  75.  
  76.  
  77.  
  78. int c[200],a[200];
  79. int n,k;
  80. int dp[1003][51];
  81. int MOD=100000007;
  82. int call(int amount,int idx)
  83. {
  84.     if(idx>n)
  85.     {
  86.         if(amount==k) return 1;
  87.         return 0;
  88.     }
  89.    
  90.     if(amount>k) return 0;
  91.     if(amount==k) return 1;
  92.     if(dp[amount][idx]!=-1) return dp[amount][idx];
  93.     int ret=0;
  94.    
  95.     for(int take=1;take<=c[idx];take++)
  96.     {
  97.         if(amount+a[idx]*take<=k)
  98.         ret+=call(amount+a[idx]*take,idx+1)%MOD;
  99.         else break;
  100.     }
  101.     ret+=call(amount,idx+1)%MOD;
  102.     return dp[amount][idx]=ret%MOD;
  103.    
  104. }
  105. int main()
  106. {
  107.     //READ("in");
  108.     int t,kas=0;
  109.     cin>>t;
  110.     while(t--)
  111.     {
  112.         mem(dp,-1);
  113.         sdii(n,k);
  114.         repl(i,n)sdi(a[i]);
  115.         repl(i,n)sdi(c[i]);
  116.         int ret=call(0,1)%MOD;
  117.         printf("Case %d: %d\n",++kas,ret);
  118.     }
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement