-
Notifications
You must be signed in to change notification settings - Fork 1
/
LightOJ 1231.cpp
64 lines (46 loc) · 1.09 KB
/
LightOJ 1231.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <bits/stdc++.h>
using namespace std;
#define READ(f) freopen(f, "r", stdin)
#define WRITE(f) freopen(f, "w", stdout)
#define rep(i, n) for(int i = 0 ; i < (n) ; i++)
#define iter(i, a, b) for(int i = (a) ; i < (b) ; i++)
#define mem(a, b) memset(a, b, sizeof(a))
typedef long long ll;
typedef pair< int , int > pii;
typedef pair< int , pii > iii;
typedef vector< pii > vii;
#define INF 1000000000
#define pi (2.0 * acos(0.0))
#define MAXX 1000
int a[55], c[55];
int n, k;
ll dp[55][1005];
ll coinChange(int idx, int sum){
ll ans = 0;
if(sum == k)
return 1;
if(idx == n)
return 0;
if(dp[idx][sum] != -1)
return dp[idx][sum];
for(int i = 0; i <= c[idx] && (sum + (i * a[idx])) <= k; i++){
ans += coinChange(idx + 1, sum + (i * a[idx]));
ans = ans % 100000007;
}
return dp[idx][sum] = ans;
}
int main(){
//READ("LightOJ 1231.txt");
int tc, case_no = 0;
scanf("%d", &tc);
while(tc--){
scanf("%d %d", &n, &k);
rep(i, n)
scanf("%d", &a[i]);
rep(i, n)
scanf("%d", &c[i]);
mem(dp, -1);
printf("Case %d: %d\n", ++case_no, coinChange(0, 0));
}
return 0;
}