萌新求助【简单dp】
查看原帖
萌新求助【简单dp】
578866
Amy_Xu楼主2023/1/25 21:38

已过样例,其他全WA

#include<bits/stdc++.h>
using namespace std;
const int N=5000+10,p=1e9+7;
int n,m,k,se,s[N],c[N],dp[N],le[N],f[26+10],ma[N];
long long ans=1;
int ksm(int di,int zi){
	if(di==1||di==0) return di;
	if(zi==0) return 0;
	long long cnt=1,jia=di;
	while(zi){
		if(zi&1) cnt=cnt*jia%p;
		zi>>=1,jia=jia*jia%p;
	}
	return cnt;
}
int main(){
	scanf("%d%d%d",&n,&m,&k);
	for(int i=1;i<=n;i++) scanf("%d%d",&s[i],&c[i]);
	for(int i=1;i<=m;i++){
		char c;
		scanf("%*c%c",&c);
		f[(int)c-'A'+1]++;
	}
	dp[0]=1;
	for(int i=0;i<=k;i++)
	for(int j=1;j<=n;j++)if(i+s[j]<=k){
		if(i+s[j]==k) le[c[j]]=(le[c[j]]+dp[i+s[j]])%p;
		dp[i+s[j]]=(dp[i+s[j]]+dp[i])%p;		
	}
	for(int i=1;i<=26;i++)if(f[i]){
		memset(ma,0,sizeof(ma));
		int pf=0;
		for(intj=1;j<=n;j++)if(le[c[j]]&&!ma[c[j]]){
			pf=(pf+ksm(le[c[j]],f[i]))%p,ma[c[j]]=1;
			
		}
		ans=ans*pf%p;
	}
	printf("%d",ans);
	return 0;
}
2023/1/25 21:38
加载中...