bzoj 1413 [ZJOI2009]取石子游戏 博弈论 dp

洛谷2599 【ZJOI2009】取石子游戏(博弈论+DP) 传送门 【题目分析】 这谁想得到要DP啊。。。。。ZJOI果然神题倍出。 参考了YYB的博客,传送门。(确实讲的很好!一看就懂!) 定义两个数组:和,L[i][j]表示在区间[i,j]左边放一堆数量为L[i][j]的石子,此时先手必败,R[i][j]表示在区间[i,j]右侧放一堆数量为R[i][j]的石子,此时先手必败。 如果存在两个或以上的L[i][j],那么显然左边的可以通过取任意个... 阅读详情

果然浙江出神题呀。。。

首先有这么一个结论:对于一段区间的石子,在这段区间左侧放一堆石子(个数可以为0)有且仅有一个石子个数使得到的状态为先手必败态。

1.因为如果有一种以上的个数,假设有x,y(x<y)两个数是先手必败态,那么可以从y转移到x。因此一定小于等于一种。
2.如果没有石子个数为先手必败态,那么每一个必胜态对应转移到的必败态一定是在右侧选一些石子,由于有无穷多个必胜态因此一定有一种在右侧选石子的方案对应两个以上必胜态,那么这种方案选完后对应两个以上必败态,与1矛盾。
因此有且仅有一种石子个数使得到的状态为先手必败态(在右边放同理)。

然后设l[i][j]表示在区间[i,j]左边放的石子个数,r[i][j]表示在右边放的石子个数。

考虑计算l[i][j] 的情况(r[i][j] 同理)。
设x=l[i][j−1],y=r[i][j−1]
1.特殊情况y=a[j] : l[i][j]=0
2.x>a[j]&&y>a[j] : l[i][j]=a[j] 先手选一次,后手在另一边选一次与其相等。那么先手一定先取完一侧。
3.x<=a[j]&&y>a[j] : l[i][j]=a[j]+1 当a[i]=x时直接取完a[j]。当a[i]>x时保证a[i]=a[j]+1,当a[i]<x时保证a[i]=a[j]
4.x>a[j]&&y<a[j] : l[i][j]=a[j]−1 与3同理
5.x<a[j]&&y<a[j] : l[i][j]=a[j] 设x<y(x>y时同理) 当a[i]=x时取完a[j],当a[j]=y时取完a[i]。当a[i]>x&&a[j]>y时保证a[i]=a[j]
当x<a[i]<=y或x<=a[j]<y时转到3

#include <bits/stdc++.h>
using namespace std;
#define N 1100
int T,n;
int a[N],l[N][N],r[N][N];
int main()
{
    ///freopen("tt.in","r",stdin);
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        if(n==1){puts("1");continue;}
        for(int i=1;i<=n;i++)
            l[i][i]=r[i][i]=a[i];
        for(int i=1;i<=n;i++)
            for(int j=1;j+i<=n;j++)
            {
                int x=l[j][j+i-1],y=r[j][j+i-1],z=a[j+i];
                if(y==z)l[j][j+i]=0;
                else if(x>z&&y>z)l[j][j+i]=z;
                else if(x<=z&&y>z)l[j][j+i]=z+1;
                else if(x>z&&y<z)l[j][j+i]=z-1;
                else l[j][j+i]=z;

                x=r[j+1][j+i],y=l[j+1][j+i],z=a[j];
                if(y==z)r[j][j+i]=0;
                else if(x>z&&y>z)r[j][j+i]=z;
                else if(x<=z&&y>z)r[j][j+i]=z+1;
                else if(x>z&&y<z)r[j][j+i]=z-1;
                else r[j][j+i]=z;
            }
        puts(l[2][n]==a[1] ? "0":"1");
    }
    return 0;
}
取石子游戏——算法与编程 取石子游戏: 堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。这种情况最有意思,它与二进制有密切关系,我们用。个,两人轮流取石子,每次只能从一堆中取,而且每堆石子都有各自的限制,就是第i堆石子每次只能取。计算机算法里面有一种叫做按位模 2 加,也叫做异或的运算,我们用符号。显然是奇异局势,无论谁面对奇异局势,都必然失败。也是奇异局势,(我先拿之后,)无论对手如何拿,接下来都可以变为。,只要与对手拿走一样多的物品,最后都将导致。,要如何变为奇异局势呢? 阅读详情

相关推荐

避坑指南:CST粒子工作室Track Solver常见的5个参数设置错误

本文深入剖析了CST粒子工作室中Track Solver在电子枪仿真时常见的5个关键参数设置错误,包括空间电荷模型选择、发射源定义、材料边界处理、监视器配置及求解器稳定性设置。通过对比错误与正确做法,帮助用户避开陷阱,确保粒子追踪仿真的物理准确性与数值稳定性,从而获得更精准的电子枪仿真结果。

dapp9builder的博客 487

【动态规划】博弈论:取石子游戏合集

博弈论

_ 2348

10X Genomics单细胞数据分析实战:从FASTQ到UMAP可视化的完整流程

本文详细介绍了10X Genomics单细胞数据分析的完整流程,从FASTQ原始数据处理到UMAP可视化。通过Seurat工具包实现数据质量控制、标准化、降维聚类和细胞注释,特别适合生物信息学新手学习。文章包含可复现的代码示例和常见问题解决方案,帮助研究者快速掌握单细胞测序数据分析的核心技术。

weixin_30952535的博客 535

【一本通提高博弈论】[ZJOI2009]取石子游戏

[ZJOI2009]取石子游戏 题目描述 在研究过 Nim 游戏及各种变种之后,Orez 又发现了一种全新的取石子游戏,这个游戏是这样的: 有 nnn 堆石子,将这 nnn 堆石子摆成一排。游戏由两个人进行,两人轮流操作,每次操作者都可以从最左或最右的一堆中取出若干颗石子,可以将那一堆全部取掉,但不能不取,不能操作的人就输了。 Orez 问:对于任意给出一个初始一个局面,是否存在先手必胜策略。 输入格式 文件的第一行为一个整数 TTT,表示有 TTT 组测试数据。对于每组测试数据: 第一行为一个整数 nnn

绿树公司的博客 486

用Zotero+B站Kimi,我如何把一篇顶会论文快速做成组会PPT(含完整提示词)

本文介绍如何利用Zotero和Kimi快速将顶会论文转化为组会PPT,提升学术汇报效率。通过Zotero的文献管理插件和Kimi的AI提炼技术,实现从论文阅读到PPT生成的全流程自动化,帮助研究者在90分钟内完成高质量汇报准备。

weixin_30955617的博客 500

Cadence仿真MOS电容C-V曲线:从电路图到参数扫描的完整流程

本文详细介绍了使用Cadence Virtuoso仿真MOS电容C-V曲线的完整流程,从电路图绘制到参数扫描,再到结果分析与问题排查。通过实际案例和实用技巧,帮助工程师快速掌握MOS电容特性分析的关键步骤,提升集成电路设计效率。

weixin_29271263的博客 431

博弈论——取石子问题

博弈论——取石子问题 有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够取胜。 (一)巴什博奕(Bash Game): 只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜

weixin_43412878的博客 3855

从门禁到支付:Uniapp+NFC开发避坑指南(支持Mifare Classic)

本文详细介绍了Uniapp结合NFC技术开发门禁与支付系统的实战指南,特别针对Mifare Classic卡片进行深度优化。内容涵盖环境配置、设备兼容性处理、卡片安全机制解析以及高性能读写优化策略,帮助开发者快速实现跨平台的智能硬件交互解决方案。

t1u2v的博客 751

【分割问题】-取石子游戏

DFS

weixin_60869516的博客 1219

CTF入门RSA维纳攻击

RSA维纳攻击 一.题目描述 适用于e过大或国过小情况下的RSA加密 题干如下: #coding:utf-8 import gmpy2 import libnum e = 54856417509806712596137531985117125938559627187663765776152288580865785539464797248184444737659643755765127505761012086539564616967122137525108154121304264697865568653100

noj_h的博客 2232

C# NX二次开发-查找连续倒圆角面

可以通过ufun函数 UF_MODL_ask_face_type 和 UF_MODL_ask_face_props 可判断处理选择相应的一组圆角面。在QQ群里有人问怎么通过一个选择一个倒圆角面来自动选中一组倒圆角面。这个是初步思路,如果有更好的思路可回复讨论一下。

fhqiwmc的博客 618

BZOJ 1413 [ZJOI2009] [洛谷2599] 取石子游戏 (博弈论 dp )

这个题数据有点水,有个奇葩程序可以过。。。(也不知道为什么。。。) 首先,讲个性质,取石子时,当先手使得左右两边的石子相等时,可以保证先手必胜,因为当先手取到左右石子相等的局面时,则后手无论在哪一堆取石子,接下来先手都可以有相同的方法取另一堆石子,这样又回到了原来的状态(左右石子相等),则无论如何先手都有办法应对后手的取法。 设在区间[i, j]左边放left[i][j](可以为0)个石子后(区间内石子保持原状),产生的局面为先手必败局面(这是重点),right[i][j]就是在右边放(定义类似);设a[

wzw-yali的博客 1691

RT-DETR改进策略【卷积层】| CVPR2025 GBConv轻量门控瓶颈卷积 低秩瓶颈降参 + 门控聚焦形态,强效捕捉纤细目标

裂缝形态不规则、纹理纤细,传统卷积参数大、计算冗余,且无法动态聚焦裂缝形态;背景噪声强易干扰特征提取,需要轻量且能自适应聚焦裂缝形态的卷积单元,因此提出轻量门控瓶颈卷积 GBC。

Limiiiing的博客 140

BZOJ1413 [ZJOI2009]取石子游戏

[ZJOI2009]取石子游戏 思路: 博弈+dp,详见yyb博客 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc++.h> using namespace std; #define y1 y11 #define fi first #d...

weixin_30872789的博客 837

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

BZOJ 1413: [ZJOI2009]取石子游戏

Description 有\(n\)堆石子,将这\(n\)堆石子摆成一排。游戏由两个人进行,两人轮流操作,每次操作者都可以从最左或最右的一堆中取出若干颗石子,可以将那一堆全部取掉,但不能不取,不能操作的人就输了。 Solution 博弈+区间DP. 这道题好厉害啊qwq... 首先一个区间\([l,r]\)在左边或右边添加一个数是个\(P\)一定仅有一个。因为有另一个的话,从另...

aisen1985的博客 246

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

省选+NOI 第九部分 博弈论

例1 取石子游戏 取石子游戏(hdu1527 博弈) - 寻找&星空の孩子 - 博客园 取石子游戏_whiterbear的专栏-优快云博客 【计蒜客习题】取石子游戏 - Mr^Kevin - 博客园 一本通1663【 例 1】取石子游戏 1 - 人间不值の - 博客园 1663:【 例 1】取石子游戏 1 信息学奥赛一本通(C++版)在线评测系统 一本通1663【 例 1】取石子游戏 1 - 人间不值の - 博客园 例2 取石子游戏 一本通提高篇在线提交地址_老象的专栏-优快云

青少年趣味编程 4342

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

BZOJ 1413: [ZJOI2009]取石子游戏 博弈+Dp

title BZOJ 1413 Description 在研究过Nim游戏及各种变种之后,Orez又发现了一种全新的取石子游戏,这个游戏是这样的: 有n堆石子,将这n堆石子摆成一排。游戏由两个人进行,两人轮流操作,每次操作者都可以从最左或最右的一堆中取出若干颗石子,可以将那一堆全部取掉,但不能不取,不能操作的人就输了。 Orez问:对于任意给出一个初始一个局面,是否存在先手必胜策略。 ...

dilu0653的博客 206

bzoj 1413: [ZJOI2009]取石子游戏(博弈+DP)

1413: [ZJOI2009]取石子游戏 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 711  Solved: 470 [Submit][Status][Discuss] Description 在研究过Nim游戏及各种变种之后,Orez又发现了一种全新的取石子游戏,这个游戏是这样的: 有n堆石子,将这n堆石子摆成一排。游戏由两

加载中... 1352

第7章 博弈论(《信息学奥赛一本通 提高篇》第6部分 数学基础)

例1 取石子游戏 取石子游戏(hdu1527 博弈) - 寻找&星空の孩子 - 博客园 取石子游戏_whiterbear的专栏-优快云博客 【计蒜客习题】取石子游戏 - Mr^Kevin - 博客园 一本通1663【 例 1】取石子游戏 1 - 人间不值の - 博客园 1663:【 例 1】取石子游戏 1 信息学奥赛一本通(C++版)在线评测系统 一本通1663【 例 1】取石子游戏 1 - 人间不值の - 博客园 例2 取石子游戏 一本通提高篇在线提交地址_老象的专栏-

青少年趣味编程 4622

信奥中的数学:博弈论

第7章 博弈论(《信息学奥赛一本通 提高篇》第6部分 数学基础) 例1 取石子游戏 取石子游戏(hdu1527 博弈) - 寻找&星空の孩子 - 博客园 取石子游戏_whiterbear的专栏-优快云博客 【计蒜客习题】取石子游戏 - Mr^Kevin - 博客园 一本通1663【 例 1】取石子游戏 1 - 人间不值の - 博客园 1663:【 例 1】取石子游戏 1 信息学奥赛一本通(C++版)在线评测系统 一本通1663【 例 1】取石子游戏 1 - 人间不值の - 博客

青少年趣味编程 803

[除草]BZOJ 1413 [ZJOI2009]取石子游戏

题目大意: 从左到右N堆石子, 每对石子数为a[i]. 两方轮流操作, 一次操作可以从最左边或最右边的石子堆取任意数量石子, 但不能不取, 不能操作的输. 问先手是否有必胜策略. (N不超过1000) 简要分析: 好囧的博弈题...现在我的脑袋里还是一团乱麻... 在尝试SG函数, 区间DP无果后, 在Discuss的诱导下注意到对于一段区间[L, R], 若L+1到R的石子数固定,...

weixin_30251829的博客 165

1218:取石子游戏(swap)

【题目描述】 有两堆石子,两个人轮流去取。每次取的时候,只能从较多的那堆石子里取,并且取的数目必须是较少的那堆石子数目的整数倍,最后谁能够把一堆石子取空谁就算赢。 比如初始的时候两堆石子的数目是25和7。 25 7 --> 11 7 --> 4 7 --> 4 3 --> 1 3 --> 1 0 选手1取 选手2取 选手1取 选手2取 选手1取 最后选手1(先...

weixin_45988242的博客 1088

博弈论——《取石子》《取石子游戏》

定义一个二元状态f(a,b),a表示当前个数为1的石子堆的数量,b表示个数不为1的所有石子堆的个数加上石子的堆d数减1的值。定义终局局面:只有一堆并且石子的个数是奇数,这样子到最后先手留给后手的是一个偶数石子个数局面,此时后手必败。只要石子数+石子的堆d数-1==b是奇数,那么先手必胜。5.合并a中的1个和b中的一个,变成f(a-1,b+1)4.合并a中的2个,变成f(a-2,b+3)3.合并b中的2个,变成f(a,b-1)2.从b中取一个,变成f(a,b-1)结论:在所有堆的石子个数>1的情况下。

测试 1796

【洛谷】P2252 取石子游戏|【模板】威佐夫博弈(配数学证明)

有两堆石子,数量任意,可以不同。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;现在给出初始的两堆石子的数目,你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。所以证明了通项公式中的项之间不能互相到达,并且之外的项必然可以一步到达公式中的某一项,从而公式中的状态都是奇异态。下面证明, 通项公式的两个不同状态之间不能一步到达。是否成立即可,如果成立,则先手必败,否则必胜。个石子,此时得到了另一个奇异态,从而。的奇异态中未出现的最小正整数,且。结论是,奇异态的通项公式为。

数学、算法爱好者的博客 671

取石子总结(博弈)

取石子(一) 有一堆石子共有n个,A和B轮流取,A先,每次最少取1个,最多取m个,先取完者胜,A,B足够聪明,问谁先胜? 比较简单的巴什博弈,若n%(m+1)!=0,A胜,否则B胜。 题解: 如果 n=m+1,那么由于一次最多只能取 m 个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。只要保持给对手留下(m+1)的倍数,就能最后获胜 #include &lt;...

月殇 6420

取石子游戏的各种解法

取石子游戏属于博弈论的题目,一下摘抄了一些人的解法 小红是个游戏迷,他和小蓝一起玩拿石子游戏。游戏规则为2个人轮流拿石子。一次可以拿1颗或3颗,规定谁取到最后一颗石子谁就胜出。最后决定由小红先取。两人都是游戏高手,该赢的绝不会输。问在知道石子总数的情况下,怎样快速预测谁将会胜出。   分析:   小红和小蓝各取一次共有三种情况:   ①共取走2颗石子

追逐繁星 4326
上一篇: bzoj 1296 [SCOI2009]粉刷匠 dp
下一篇: bzoj 1415 [Noi2005]聪聪和可可 概率dp
make_it_for_good
博客等级 码龄11年 13粉丝 183原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值