Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long int ll;
- ll n,m,coin[300],fre[300];
- vector<ll>pre,cur;
- int dp[2000006];
- void build()
- {
- for(ll i=0; i<=m; i++)
- {
- if(dp[i]==1)
- pre.push_back(i);
- }
- }
- int main()
- {
- ll i,j,k,t,cas,cnt=0;
- cin>>t;
- for(cas=1; cas<=t; cas++)
- {
- cin>>n>>m;
- cnt=0;
- pre.clear();
- cur.clear();
- memset(dp,0,sizeof(dp));
- for(i=1; i<=n; i++)
- {
- cin>>coin[i];
- }
- for(i=1; i<=n; i++)
- {
- cin>>fre[i];
- }
- dp[0]=1;
- pre.push_back(0);
- for(i=n; i>=1; i--)
- {
- build();
- for(j=1; j<=fre[i]; j++)
- {
- cur.clear();
- for(k=0; k<pre.size(); k++)
- {
- ll banabo=pre[k]+coin[i];
- if(banabo<=m && dp[banabo]==0)
- {
- cnt++;
- cur.push_back(banabo);
- dp[banabo]=1;
- }
- }
- pre=cur;
- }
- }
- cout<<"Case "<<cas<<": "<<cnt<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement