容斥的暴力 dp 式?
查看原帖
容斥的暴力 dp 式?
556362
Unnamed114514楼主2023/3/1 00:11

思路大概就是用总数减去含 A1A2AnA_1A_2\cdots A_n 的数,但是 lz 暴力总是推不对?

#include<bits/stdc++.h>
using namespace std;
int n,m,K,dp[1000005][25];
string s; 
inline int qpow(int x,int y){
	if(!y)
		return 1;
	int k=qpow(x,y>>1);
	if(y&1)
		return k*k%K*x%K;
	return k*k%K;
}
signed main(){
	cin>>n>>m>>K>>s;
	dp[0][0]=1;
	for(int i=1;i<=n;++i)
		for(int j=0;j<=m;++j)
			if(j==m)
				dp[i][j]=(dp[i-1][j]*10%K+dp[i-1][j-1])%K;
			else if(j)
				dp[i][j]=dp[i-1][j-1];
			else{
				for(int k=0;k<=m;++k)
					dp[i][j]=(dp[i][j]+dp[i-1][k]*9%K)%K;
			}
	cout<<(qpow(10,n)-dp[n][m]+K)%K<<endl;
	return 0;
} 
2023/3/1 00:11
加载中...