这么大的数还有模数为三,很容易想到数位dp
这个题1-9每位数选0个模数为0,选1个模数为a(a为1或2),选两个模数为b(a为1则b为2,a为2则b为1),选三个模数为0,选4个等同于选1个。。。。循环
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=11,mod=1e9+7;
ll a[N],ans;
void dfs(int dep,int sum,int md){
if(dep>9) {
if(md==0) ans=(ans+sum)%mod;
return ;
}
for(int i=0;i<=2;i++){
ll tmp=a[dep]/3+(a[dep]%3>=i);
dfs(dep+1,sum*tmp%mod,(md+i*dep)%3);
}
}
int main(){
for(int i=1;i<=9;i++) scanf("%lld",&a[i]);
dfs(1,1,0);
printf("%lld\n",ans);
return 0;
}