状态转移貌似没有错啊?为什么9WA?
查看原帖
状态转移貌似没有错啊?为什么9WA?
118630
Lube楼主2020/11/26 17:54
#include<bits/stdc++.h>
using namespace std;
int n,m;
char a[100005];
int dp[100005][5][25];
int win(int x,int y)
{
	if(x==1&&y==2)return 1;
	if(x==2&&y==3)return 1;
	if(y==3&&x==1)return 1;
	return 0;
}
int minnum(int num)
{
	if(num==1)return 2;
	if(num==2)return 1;
	if(num==3)return 1;
}
int maxnum(int num)
{
	if(num==1)return 3;
	if(num==2)return 3;
	if(num==3)return 2;
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
	    getchar();
		char c;scanf("%c",&c);
		int scan;if(c=='H')scan=1;if(c=='S')scan=2;if(c=='P')scan=3;
		a[i]=scan;
	}
	//h:1  s:2  p:3
	for(int j=1;j<=3;j++)dp[1][j][m]=win(j,a[1]);
	for(int i=2;i<=n;i++)
	{
		for(int j=1;j<=3;j++)
		{
			for(int k=max(0,m-i+1);k<=m;k++)
			{
				dp[i][j][k]=max(dp[i][j][k],win(j,a[i])+dp[i-1][j][k]);
				if(k==m)continue;
				int num1,num2;num1=minnum(j);num2=maxnum(j);
				dp[i][j][k]=max(dp[i][j][k],dp[i-1][num1][k+1]+win(j,a[i]));
				dp[i][j][k]=max(dp[i][j][k],dp[i-1][num2][k+1]+win(j,a[i]));
			}
		}
	}
	int ans=0;
	for(int j=1;j<=3;j++)for(int k=1;k<=m;k++)ans=max(ans,dp[n][j][k]);
	printf("%d",ans);
}
2020/11/26 17:54
加载中...