首页 > 其他分享 >取石子游戏(博弈dp)

取石子游戏(博弈dp)

时间:2023-08-10 20:34:35浏览次数:37  
标签:博弈 int 石子 len else && 一堆 dp

在研究过 Nim 游戏及各种变种之后,Orez 又发现了一种全新的取石子游戏,这个游戏是这样的:

有 n 堆石子,将这 n 堆石子摆成一排。

游戏由两个人进行,两人轮流操作,每次操作者都可以从最左或最右的一堆中取出若干颗石子,可以将那一堆全部取掉,但不能不取,不能操作的人就输了。

Orez 问:对于任意给出的一个初始局面,是否存在先手必胜策略。

输入格式

第一行为一个整数 T,表示有 T 组测试数据。

对于每组测试数据,第一行为一个整数 n,表示有 n 堆石子,第二行为 n 个整数 ai ,依次表示每堆石子的数目。

输出格式

对于每组测试数据仅输出一个整数 0 或 1,占一行。

其中 1 表示有先手必胜策略,0 表示没有。

数据范围

1≤T≤10
1≤n≤1000
1≤ai≤109

输入样例:

1
4
3 1 9 4

输出样例:

0
 

 

 

 

 

 

 

 代码

```

#include<iostream>
#include<cstring>

using namespace std;

const int N = 1010;

int n;
int a[N];
int l[N][N], r[N][N];

int main()
{
int T;
cin >> T;
while(T--)
{
cin >> n;
for (int i = 1; i <= n; i ++ ) cin >> a[i];
// 长度
for (int len = 1; len <= n; len ++ )
// 左右端点i 右端点j
for (int i = 1; i + len - 1 <= n; i ++ )
{
int j = i + len - 1;
// 区间只有一个堆x 则左右取为x -> x [x] x
// 只要先手取哪一堆 后手在另一堆取一样多的石子
// 则只要先手取得这堆有,后手取得另一堆也一定有,
// 直到先手取得那堆取完,后手把另一堆取完 先手必败
if (len == 1) l[i][j] = r[i][j] = a[i];
else
{
int L = l[i][j - 1], R = r[i][j - 1], X = a[j];
// 情况1
if (R == X) l[i][j] = 0;
// 情况2 情况4
else if (X < L && X < R || X > L && X > R) l[i][j] = X;
// 情况3.1 情况4.1
else if (L > R) l[i][j] = X - 1;
// 情况3.2 情况4.2
else l[i][j] = X + 1;

// 与上述情况对称的四种情况
L = l[i + 1][j], R = r[i + 1][j], X = a[i];
if (L == X) r[i][j] = 0;
else if (X < L && X < R || X > L && X > R) r[i][j] = X;
else if (R > L) r[i][j] = X - 1;
else r[i][j] = X + 1;
}
}

if (n == 1) puts("1");
else printf("%d\n", l[2][n] != a[1]);
}
return 0;
}

```

标签:博弈,int,石子,len,else,&&,一堆,dp
From: https://www.cnblogs.com/liyuzhong/p/17621432.html

相关文章

  • reactnative ignite App + wordpress後台CMS 詳細案例
    1.0入門篇WordPress-Plugin-Boilerplate-Tutorial更为简洁的架构方案ReactNativeElements开发环境&生成项目&虚拟机调试&本地生成APK档&虚拟机运行APK档 2.0Ignite框架 Ignite是reactnative里最最齊全的軍火庫。https://github.com/infinitered/ignite 3......
  • 测试udp端口联通性
    时钟服务器默认使用的UDP协议的123端口,测试联通性时不能使用telnet命令,可以使用nc命令,如下:nc-vuz192.168.1.2123Connectionto192.168.1.2123port[udp/ntp]succeeded!如果没有安装,可以使用yum进行安装yuminstall-ync......
  • DPU替代网络可视化专用设备实现业务报文深度处理
    网络可视化中的深度业务处理网络可视化场景中,通常需要将采集过来的数据经过深度业务处理后再交给后端分析系统。这些深度业务处理功能包括:传统的深度业务处理通常由带CPU的框式设备完成,但框式设备成本高、功耗大、扩展不够灵活的种种给客户带来了极大的困扰。DPU算力的池化应用Heli......
  • ISTDP:心灵的深海潜水
    (仅供参考)有一天,我被一种名为ISTDP(IntensiveShort-TermDynamicPsychotherapy,强化短期动态心理治疗)的心理治疗方法所吸引。我决定深入研究这个看似神秘的名字背后的内容。就像一个深海潜水员,我将踏上一个探索我们情感深处、挖掘我们心灵深层防御机制的旅程。1.ISTDP:强化短期动......
  • Wordpress:如何使用Elementor给页面Button做跳转页面锚点定位?
    网站页面有的关键部分不一定在页面首屏,但是如果其它页面有时候需要做跳转,比如联系框,需要直接跳转到联系框的实际位置,在使用Elementor插件的情况下,如何实现呢?前端技术告诉我们,要实现点击a标签或者按钮跳转到指定位置,可以使用id定位,并在跳转链接后加入#符号附带该ID即可如: ......
  • PROFIBUS-DP主站转ETHERCAT网关连接安川伺服支持EtherCAT总线吗
    大家好,今天要给大家介绍一款捷米的神秘产品,它的名字叫JM-DPM-ECT,是一款兼具PROFIBUS-DP主站功能的通讯网关。想象一下,它既能和PROFIBUS总线打交道,又能与ETHERCAT网络愉快地交流,是不是感觉很神奇?别看这只是一台小小的网关,它的作用可是非常大的!它可以将各种PROFIBUS-DP从站接入到ET......
  • Wordpress:如何放置谷歌GTM代码?
    使用Wordpress建站需要应用谷歌的GTM代码进行监测用户行为,那么如何安装GTM代码呢?分为两种,一.使用插件进行安装二.直接编辑代码Header模块进行安装。先看看谷歌GTM的安装要求:注意:1.script部分需要安装在head标签之内;2.noscript部分需要安装在body开始标签之后。 方法一......
  • 2023下半年产品经理NPDP认证8月19日正式开班,报名从速
    产品经理国际资格认证NPDP是新产品开发方面的认证,集理论、方法与实践为一体的全方位的知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。  【认证机构】 产品开发与管理协会(PDMA)成立于1979年,是全球范围内产品开发与管理专业人士最杰出的倡导者,协助个人、企业......
  • DP (tyy)
    P7154[USACO20DEC]SleepingCowsP按奶牛和牛棚的大小混合排序,由于匹配极大,故钦定奶牛或牛棚不被匹配状态设计:\(f[i][j][0/1]\)表示考虑到第\(i\)个奶牛和牛棚\(j\)个没有被钦定奶牛没有被匹配,是否钦定过不匹配的奶牛过牛棚(\(0/1\))转移方程:若为奶牛\(f[i][j][0]=f[i-......
  • Atcoder ABC307_G-Approximate Equalization 序列dp
    AT_ABC307_G-ApproximateEqualization没想到还有ApproximateEqualizationII!!:AT_ABC313_CDescription:给定一个长度为\(N\)的数列:\(A=(A_1,A_2,···,A_N)\),有两种操作可以以任意顺序进行任意多次(可以为0):\(A[i]-\)=\(1\)且\(A[i+1]+\)=\(1\),\((1\leqi\leqN-1)......