满意的集合(牛客)


这么大的数还有模数为三,很容易想到数位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;
}
posted @ 2022-01-16 21:42  wzx_believer  阅读(41)  评论(0编辑  收藏  举报