ABC195E

其实我们发现很多博弈论的动态规划都是从后往前的,比如过河卒和本题。

这是因为从某种角度上来说这些动态规划有后效性而无前效性

所以设计状态 \(dp_{i,j}\) 表示第 \(i\) 次操作 \(T\)\(7\) 的余数为 \(j\) 的情况下能否走到 Takahashi 的胜利状态

然后就是正常的博弈论倒序转移。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 3e5+114;
string X,S;
int n;
int dp[maxn][10];//第 i 次操作后 base-10 T % 7 = j 是否可能达成目标 
signed main(){
	cin>>n;
	cin>>X>>S;
	dp[n][0]=1;
	for(int i=n-1;i>=0;i--){
		for(int j=0;j<7;j++){
			if(S[i]=='T'){
				dp[i][j]=dp[i+1][(j*10+((int)(X[i]-'0')%7))%7]|dp[i+1][(j*10)%7];
			}
			else{
				dp[i][j]=dp[i+1][(j*10+((int)(X[i]-'0')%7))%7]&dp[i+1][(j*10)%7];
			}
		}
	}
	cout<<(dp[0][0]==1?"Takahashi":"Aoki");
} 
posted @ 2024-02-27 18:12  ChiFAN鸭  阅读(9)  评论(0编辑  收藏  举报