玄学问题
查看原帖
玄学问题
678012
yuchuanqi楼主2024/6/2 20:53

如果这样是10分RE

#include<iostream>
using namespace std;
const int maxn=1010,maxm=210,MOD=1000000007; 
int n,m,q,f[2][maxm][maxm][2];
char a[maxn],b[maxm];
signed main(){
	cin>>n>>m>>q>>a+1>>b+1;
	for(int i=1;i<=n;i++){
//		cout<<(i&1)<<"\n";
		for(int j=1;j<=m;j++){
			for(int k=1;k<=q;k++){
				f[i&1][j][k][1]=f[i&1][j][k][0]=0;
			}
		}
		if(a[i]==b[1]){
			f[i&1][1][1][1]=1;
		} 
		for(int j=1;j<=i;j++){
			for(int k=1;k<=q;k++){
				if(a[i]==b[j]){
					f[i&1][j][k][1]+=f[(i-1)&1][j-1][k][1]+f[(i-1)&1][j-1][k-1][0]+f[(i-1)&1][j-1][k-1][1];
					f[i&1][j][k][0]=f[(i-1)&1][j][k][0]+f[(i-1)&1][j][k][1];
				}
				else{
					f[i&1][j][k][0]=f[(i-1)&1][j][k][0]+f[(i-1)&1][j][k][1];
				}
				f[i&1][j][k][1]%=MOD,f[i&1][j][k][0]%=MOD;
			}
		}
	}
	cout<<(f[n&1][m][q][0]+f[n&1][m][q][1])%MOD;
	return 0;
}

如果把第三行的maxm改成410,第四行改成f[4][maxm][maxm][2],就AC了

#include<iostream>
using namespace std;
const int maxn=1010,maxm=410,MOD=1000000007; 
int n,m,q,f[4][maxm][maxm][2];
char a[maxn],b[maxm];
signed main(){
	cin>>n>>m>>q>>a+1>>b+1;
	for(int i=1;i<=n;i++){
//		cout<<(i&1)<<"\n";
		for(int j=1;j<=m;j++){
			for(int k=1;k<=q;k++){
				f[i&1][j][k][1]=f[i&1][j][k][0]=0;
			}
		}
		if(a[i]==b[1]){
			f[i&1][1][1][1]=1;
		} 
		for(int j=1;j<=i;j++){
			for(int k=1;k<=q;k++){
				if(a[i]==b[j]){
					f[i&1][j][k][1]+=f[(i-1)&1][j-1][k][1]+f[(i-1)&1][j-1][k-1][0]+f[(i-1)&1][j-1][k-1][1];
					f[i&1][j][k][0]=f[(i-1)&1][j][k][0]+f[(i-1)&1][j][k][1];
				}
				else{
					f[i&1][j][k][0]=f[(i-1)&1][j][k][0]+f[(i-1)&1][j][k][1];
				}
				f[i&1][j][k][1]%=MOD,f[i&1][j][k][0]%=MOD;
			}
		}
	}
	cout<<(f[n&1][m][q][0]+f[n&1][m][q][1])%MOD;
	return 0;
}
2024/6/2 20:53
加载中...