codeforces 1033C - Permutation Game(记忆化搜索,简单博弈)

题目:http://codeforces.com/contest/1033/problem/C

题意:给出n个数,n大小为1~n,A,B两个人进行比赛,起点为1—n,A先走,B后走,每走一步有两个条件
(从 i 走到 j )
1.a[j]>a[i]
2.|j-i|%mod(a[i])=0;

思路1:记忆化搜索,将能走到的路记忆化下来,因为状态太多会走到许多重复的路,此时需要定义dp[N][2]
dp[x][0]表示到A走到x时A胜利情况
dp[x][1]表示B的输赢情况。
A胜利为1,B胜利为0.
这里要注意轮到A走时,默认A输掉比赛,所以他要找到接下来能让他胜利的结果,只要有一个结果能使A胜利那么他就能胜利,同理B也是这样

思路2:官方题解给出:反建图+拓扑排序 ,由于题目给出限定条件,建的图必为DAG
对于每一个顶点,如果是必胜,那么必定存在一条边连接的是必败
必胜态的后继状态中存在至少一个必败态,必败态的后继状态全是必胜态。
进行拓扑排序(代码暂时没写…)

方法一

#include<bits/stdc++.h>
#define fi first
#define se second
#define log2(a) log(n)/log(2)
#define show(a) cout<<a<<endl;
#define show2(a,b) cout<<a<<" "<<b<<endl;
#define show3(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl;
using namespace std;

typedef long long ll;
typedef pair<int, int> P;
typedef pair<P, int> LP;
const ll inf = 1e17 + 10;
const int N = 1e6 + 10;
const ll mod = 1e9+7;
const int base=131;
const double pi=acos(-1);
map<string, int>ml;


map<ll,ll> mp;
map<int,int> vi;
priority_queue<P> q;
priority_queue<P> tq;



ll b[N], vis[N], dep[N],num[N], a[N],t, n, m,  k,x,y;
ll ex, ey, cnt, sum, flag;

//vector<int> v[N];
vector<int> fac[N];
string s;
int dp[N][3];

char v[1005][1005];

int dfs(int x,int num)
{

	//show2(x,num);
	if(dp[x][num%2]!=-1) return dp[x][num%2];
	else
	{
		dp[x][num%2]= (num%2==0) ? 0 : 1;
		int did=0;
		for(int i=1;;i++)
		{
			int l=x-i*a[x],r=x+i*a[x];
			if(l>=1&&a[l]>a[x])
			{
				if(num%2==0) dp[x][num%2]=max(dp[x][num%2],dfs(l,num+1)),did=1;
				else dp[x][num%2]=min(dp[x][num%2],dfs(l,num+1)),did=1;
			}
			if(r<=n&&a[r]>a[x])
			{

				if(num%2==0) dp[x][num%2]=max(dp[x][num%2],dfs(r,num+1)),did=1;
				else dp[x][num%2]=min(dp[x][num%2],dfs(r,num+1)),did=1;

			}
			if(l<1&&r>n) break;

		}
		if(!did)
		{

			return dp[x][num%2]=num%2;
		}

	}
	return dp[x][num%2];


}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);

	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		dp[i][0]=dp[i][1]=-1;
	}
	for(int i=1;i<=n;i++)
	{

		if(dfs(i,0)) cout<<"A";
		else cout<<"B";

	}



}

猜你喜欢

转载自blog.csdn.net/weixin_42640692/article/details/88145884