Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int n,price[51],isavilable[51],dp[1001][51];
- int func(int i, int value)
- {
- if(i>=n)
- {
- if(value == 0) return 1;
- else return 0;
- }
- if(value == 0) return 1;
- if(dp[value][i] != -1)
- return dp[value][i];
- int result = 0;
- for(int j = 0; j <= isavilable[i]; j++)
- {
- if(value-price[i]*j >= 0)
- result = (result%100000007 + func(i+1,value-(price[i]*j)))%100000007;
- }
- return dp[value][i]=result;
- }
- int main()
- {
- int T,value,cases=0;
- scanf("%d",&T);
- while(T--)
- {
- scanf("%d %d", &n, &value);
- for(int i = 0; i <= value+1; i++)
- {
- for(int j = 0; j <= n; j++)
- {
- dp[i][j]= -1;
- }
- }
- for(int i = 0; i < n; i++) scanf("%d",&price[i]);
- for(int i = 0; i < n; i++) scanf("%d",&isavilable[i]);
- printf("Case %d: %d\n",++cases,func(0,value));
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement