做网站找那家公司好数字媒体应用 网站开发
news/
2025/9/23 0:18:56/
文章来源:
做网站找那家公司好,数字媒体应用 网站开发,运城做网站要多少钱,网站培训制度正题
P2599 题目大意
给n堆石子#xff0c;第 i 堆有 aia_iai 个石子#xff0c;每次可以从最左边或者最右边的一堆里面取若干个#xff0c;两个人轮流取#xff0c;问先手是否存在必胜策略 解题思路
设 li,jl_{i,j}li,j 为在 [i,j][i,j][i,j] 右边添加一堆大小 li,…正题
P2599 题目大意
给n堆石子第 i 堆有 aia_iai 个石子每次可以从最左边或者最右边的一堆里面取若干个两个人轮流取问先手是否存在必胜策略 解题思路
设 li,jl_{i,j}li,j 为在 [i,j][i,j][i,j] 右边添加一堆大小 li,jl_{i,j}li,j 的石子会使得先手必败ri,jr_{i,j}ri,j同理
首先证明 li,jl_{i,j}li,j 只存在一个
如果存在两个 li,jl_{i,j}li,j那么先手显然可以从大的直接操作为小的那么先手必胜不满足先手必败所以最多有一个 li,jl_{i,j}li,j
接下来证明一定存在 li,jl_{i,j}li,j
如果不存在 li,jl_{i,j}li,j那么左边无论加多少个数都是必胜状态 如果先手选左边那么必定到必胜状态不满足先手必胜所以先手肯定选右边 选了若干数后一定满足无论左边加的是多少都必败那么后手在左边选一个数则又回到了必败状态不满足先手必胜
综上必定存在 li,jl_{i,j}li,j
同理必定存在 ri,jr_{i,j}ri,j 且只存在一个
接下来考虑如何转移
对于 li,jl_{i,j}li,j 的求解考虑从 [i,j−1][i,j-1][i,j−1] 转移那么必定和 li,j−1,ri,j−1l_{i,j-1},r_{i,j-1}li,j−1,ri,j−1 有关令 Lli,j−1,Rri,j−1Ll_{i,j-1},Rr_{i,j-1}Lli,j−1,Rri,j−1
RajRa_jRaj那么先手就是必败的所以 li,j0l_{i,j}0li,j0对于其他情况其实就是把必败的决策点除外令左右必胜决策点数相同即可 如果先手左边拿到 L那么右边直接取空则先手必败右边同理 如果先手左边拿完那么对于后手就是必胜得状态 否则先手左边拿多少必胜决策右边拿同样多即可
最后判断 a1a_1a1 是否等于 l2,nl_{2,n}l2,n 即可
时间复杂度 O(n2T)O(n^2T)O(n2T) code
#includecstdio
#includecstring
#includeiostream
#includealgorithm
#define ll long long
#define N 1010
using namespace std;
int T,n,a[N],l[N][N],r[N][N];
int main()
{scanf(%d,T);while(T--){scanf(%d,n);for(int i1;in;i){scanf(%d,a[i]);l[i][i]r[i][i]a[i];}for(int len2;lenn;len)for(int i1;in-len1;i){int jilen-1,L,R;Ll[i][j-1];Rr[i][j-1];if(a[j]R)l[i][j]0;else if(La[j]a[j]R)l[i][j]a[j]1;else if(a[j]La[j]R)l[i][j]a[j];else if(La[j])l[i][j]a[j];else l[i][j]a[j]-1;Ll[i1][j];Rr[i1][j];if(a[i]L)r[i][j]0;else if(Ra[i]a[i]L)r[i][j]a[i]1;else if(a[i]Ra[i]L)r[i][j]a[i];else if(Ra[i])r[i][j]a[i];else r[i][j]a[i]-1;}if(l[2][n]!a[1])puts(1);else puts(0);}return 0;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/910857.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!