题意,有n个点排成一个圈。有一个棋子,两个人轮流在各自集合选出一些数来移动棋子。将棋子移动到点1的人获胜,求棋子在2~n且两个人先手情况下的获胜情况
题解:
必胜态:后继状态对方有一个必败态
必败态:后继状态对方都是必胜态
平局:其他情况。因为我们已经不能必胜,但败更不优,所以其他情况就是平局。
那么我们可以设 d p [ i ] [ j ] dp[i][j] dp[i][j]表示第 i i i个人在 j j j个位置为先手的时候的状态,0为必败,1为必胜。但是我们并不能从后继状态推到出当前状态。我们最初只知道1位置是必败态,那么我们反向推就行了。如果当前状态为必败,那么前继状态为必胜。若当前状态为必胜,且其前继状态的所有后继状态都为必胜,那么它就为必败。否则除了以上两种情况都是平局。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn = 7005;
int n;
vector<int>V[2]<