Sie sind auf Seite 1von 1

#include <bits/stdc++.

h>
#define MOD 1000000007
using namespace std;
int t,n,m;
map<pair<vector<int>,int>, int> mv;
long long int getmv(vector<int> &pos,vector<int> &d,int m){
if(m<=0)
return 0;
long long int cnt=0;
for(int i=0;i<pos.size();++i){
if(pos[i]+1 <= d[i]){
pos[i]++;
if(!mv[make_pair(pos,m-1)]) mv[make_pair(pos,m-1)] = 1 + getmv(po
s,d,m-1)%MOD;
cnt += mv[make_pair(pos,m-1)];
cnt = cnt%MOD;
pos[i]--;
}
if(pos[i]-1 > 0){
pos[i]--;
if(!mv[make_pair(pos,m-1)]) mv[make_pair(pos,m-1)] = 1 + getmv(po
s,d,m-1)%MOD;
cnt += mv[make_pair(pos,m-1)];
cnt = cnt%MOD;
pos[i]++;
}
}
return cnt;
}
int main() {
cin>>t;
while(t--){
cin>>n>>m;
vector<int> init(n),d(n);
for(int i=0;i<n;++i) cin>>init[i];
for(int i=0;i<n;++i) cin>>d[i];
cout<<getmv(init,d,m)<<endl;
}
return 0;
}

Das könnte Ihnen auch gefallen