社区讨论

90pts求助WA#2

P3609[USACO17JAN] Hoof, Paper, Scissor G参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m5yrcitj
此快照首次捕获于
2025/01/16 11:15
去年
此快照最后确认于
2025/01/16 11:15
去年
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
int n,dp[100010][30][4],k,a[100010];
char c[100010];
bool win(int a,int b){
	if(a==b)
		return 0;
	if(a==1&&b==2)
		return 0;
	if(a==1&&b==3)
		return 1;
	if(a==2&&b==1)
		return 1;
	if(a==2&&b==3)
		return 0;
	if(a==3&&b==1)
		return 0;
	if(a==3&&b==2)
		return 1;
}
int main(){
	freopen("P3609_2.in","r",stdin);
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>c[i];
		if(c[i]=='P')
			a[i]=1;
		else if(c[i]=='S')
			a[i]=2;
		else
			a[i]=3;
	}
	if(a[1]==1)
		dp[1][0][2]=1;
	else if(a[1]==2)
		dp[1][0][1]=1;
	else
		dp[1][0][1]=1;
	for(int i=1;i<=n;i++){
		for(int j=0;j<=k&&j<=i;j++){
			for(int l=1;l<=3;l++){
				for(int m=1;m<=3;m++){
					if(m==l)
						dp[i][j][m]=max(dp[i][j][m],dp[i-1][j][m]+win(m,a[i]));
					else if(j==0)
						continue;
					else{
						dp[i][j][m]=max(dp[i][j][m],dp[i-1][j-1][l]+win(m,a[i]));
					}
				}
			}
		}
	}
	int ans=0;
	for(int i=0;i<=k;i++)
		for(int j=1;j<=3;j++)
			ans=max(ans,dp[n][i][j]);
	cout<<ans;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...