Advertisement
Guest User

Untitled

a guest
Feb 6th, 2016
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.36 KB | None | 0 0
  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<string.h>
  4. #include<math.h>
  5. #define mod 100000007
  6.  
  7. //5 /5 8 11 15 18 /18 using one coin several time
  8. //how many ways it can be created
  9.  
  10.  
  11.  
  12. using namespace std;
  13. int n,cap;
  14. int val[102];
  15. int num[102];
  16. bool flag;
  17. int dp[102][1002][25];
  18.  
  19. int coin(int i,int w,int c)
  20. {
  21. if(w==0)
  22. {
  23. return 1;
  24. }
  25. if(i>=n)
  26. {
  27. if(w==0)
  28. {
  29.  
  30. return 1;
  31. }
  32. else if(w!=0)
  33. {
  34. return 0;
  35. }
  36.  
  37. }
  38.  
  39. if(dp[i][w][c]!=-1)
  40. {
  41. return dp[i][w][c];
  42. }
  43.  
  44. int ret1,ret2;
  45. ret1=ret2=0;
  46.  
  47.  
  48. if(w-val[i]>=0)
  49. {
  50. if(c<num[i])
  51. {
  52. ret1=coin(i,w-val[i],c+1)%mod;
  53. }
  54. }
  55.  
  56. ret2=coin(i+1,w,0)%mod;
  57.  
  58. dp[i][w][c]=(ret1+ret2)%mod;
  59.  
  60. return dp[i][w][c];
  61.  
  62. }
  63.  
  64. int main()
  65. {
  66. int i,j,k,t;
  67. // 5 types of coins: 50-cent, 25-cent, 10-cent, 5-cent, and 1-cent
  68. scanf("%d",&t);
  69. for(int kk1=1;kk1<=t;kk1++)
  70. {
  71. scanf("%d %d",&n,&cap);
  72. for(i=0;i<n;i++)
  73. {
  74. scanf("%d",&val[i]);
  75. }
  76. for(i=0;i<n;i++)
  77. {
  78. scanf("%d",&num[i]);
  79. }
  80.  
  81. memset(dp,-1,sizeof(dp));
  82. printf("Case %d: ",kk1);
  83. printf("%d\n",(coin(0,cap,0)));
  84.  
  85.  
  86. }
  87.  
  88.  
  89.  
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement