求助
查看原帖
求助
768195
ty_mxzhn楼主2023/5/9 21:27

82pts WA

#include <iostream>
#include <cstring>
#include <string>
using namespace std;

int n,k,ans,f[2][507][507][2];
string str;
signed main(){
	cin>>n>>k;
	cin>>str;
	memset(f,128,sizeof f);
	for(int i=0;i<n;i++){
		for(int j=0;j<=k;j++){
			for(int z=0;z<=k;z++){
				if(i==0){
					if((j==0)&&str[i]=='j') f[i&1][j][z][1]=-0x3f3f3f3f;
					else f[i&1][j][z][1]=0;
					if((z==0)&&str[i]=='z') f[i&1][j][z][0]=-0x3f3f3f3f;
					else f[i&1][j][z][0]=0;
					if(str[i]=='j') f[i&1][j][z][0]=0;
					if(str[i]=='z') f[i&1][j][z][1]=0;
				}
				if(str[i]=='j'&&i>=1){
					f[i&1][j][z][0]=max(f[(i-1)&1][j][z][0],f[(i-1)&1][j][z][1]);
					if(j>=1) f[i&1][j][z][1]=max(f[(i-1)&1][j-1][z][0]+1,f[(i-1)&1][j-1][z][1]);
					else f[i&1][j][z][1]=-0x3f3f3f3f;
				}
				if(str[i]=='z'&&i>=1){
					f[i&1][j][z][1]=max(f[(i-1)&1][j][z][0]+1,f[(i-1)&1][j][z][1]);
					if(z>=1) f[i&1][j][z][0]=max(f[(i-1)&1][j][z-1][0],f[(i-1)&1][j][z-1][1]);
					else f[i&1][j][z][0]=-0x3f3f3f3f;
				}
				//cout<<"("<<f[i&1][j][z][0]<<" "<<f[i&1][j][z][1]<<")";
			}
			//cout<<"\n";
		}
		//cout<<"#\n";
	}
	for(int i=0;i<=k;i++){
		ans=max(ans,max(f[(n-1)&1][i][i][0],f[(n-1)&1][i][i][1]));
	}
	cout<<ans;
	return 0;
}
2023/5/9 21:27
加载中...