Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define int long long
- int dp[51][101][51],mod=1e9+7;
- int fun(int ind,int curr_max,int cost,int n,int m)
- {
- if(ind==n) return cost==0;
- if(cost<0) return 0;
- if(dp[ind][curr_max][cost]!=-1) return dp[ind][curr_max][cost];
- int ans=0;
- for(int i=1;i<=m;i++) ans+=fun(ind+1,(i>curr_max?i:curr_max),cost-(i>curr_max),n,m),ans%=mod;
- return dp[ind][curr_max][cost]=ans;
- }
- int32_t main()
- {
- int n;
- cin>>n;
- int num[n],size[n],cost[n];
- for(int i=0;i<n;i++) cin>>num[i];
- cin>>n;
- for(int i=0;i<n;i++) cin>>size[i];
- cin>>n;
- for(int i=0;i<n;i++) cin>>cost[i];
- vector<int> v;
- for(int i=0;i<n;i++)
- {
- memset(dp,-1,sizeof(dp));
- int ans=0;
- for(int j=1;j<=size[i];j++) ans+=fun(1,j,cost[i],num[i],size[i]), ans%=mod;
- v.push_back(ans);
- }
- for(int i=0;i<n;i++) cout<<v[i]<<endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement