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 加,也叫做异或的运算,我们用符号。显然是奇异局势,无论谁面对奇异局势,都必然失败。也是奇异局势,(我先拿之后,)无论对手如何拿,接下来都可以变为。,只要与对手拿走一样多的物品,最后都将导致。,要如何变为奇异局势呢? 阅读详情

相关推荐

Hand-Eye 标定误差分析:从理论到 C++ 实现

本文深入探讨了机器人手眼标定中的核心环节——误差分析。文章从AX=XB方程的理论残差出发,详细解析了旋转与平移误差的数学定义与物理意义,并提供了一个工业级的C++实现代码,用于计算重投影误差。通过误差分析,工程师可以量化标定精度,诊断问题根源,从而确保视觉引导机器人系统在实际应用中的可靠性与精确性。

c7d8e的博客 695

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

博弈论

_ 2348

用GraphPad Prism直出单细胞亚群堆叠柱状图

用GraphPad Prism直出单细胞亚群堆叠柱状图

fivehuge的博客 4196

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

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

绿树公司的博客 486

TriCore架构-基于TC397的启动流程

TC397芯片的启动流程分为三个关键阶段:固件启动(BootFirmware)、Bootloader引导和应用程序启动。BootFirmware作为硬件信任根,包含SSW基础初始化、CHSW自检和BSL应急刷写通道。Bootloader承担安全验证和程序引导功能,支持双分区(AB-SWAP)和双引导方案(PBL/SBL)。安全启动通过校验机制确保软件完整性,提供三种可选技术方案。应用程序启动阶段实现软件双分区管理,支持SOTA更新。整个流程体现了汽车电子系统的安全设计理念,通过硬件级保护与软件验证相结合确保

xiandang8023的博客 987

Python 爬虫实战:抓取悦动圈跑步爱好者运动轨迹数据,规划健身路线

通过本次 Python 爬虫实战,我们学习了如何使用 Python 抓取悦动圈跑步爱好者的运动轨迹数据,并基于这些数据进行分析和处理,最终规划出健身路线。在这个过程中,我们掌握了requests、BeautifulSoup、pandas和matplotlib等库的基本使用方法,了解了爬虫的基本原理和流程。希望本文能够帮助你更好地理解和应用 Python 爬虫技术,在数据处理和分析领域取得更多的成果。

u014481728的博客 2365

博弈论——取石子问题

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

weixin_43412878的博客 3855

【思考模型框架】采用双钻模型:发散(桌面研究/用户访谈)→收敛(需求归类/优先级排序),输出需求规格书、追踪矩阵及产品待办清单。

设计思维双钻模型是一种以用户为中心的需求管理方法,通过"发散-收敛"的双循环确保问题定位准确、方案切实可行。第一钻石(探索→定义)聚焦"找对问题",运用用户访谈、田野调查等方法挖掘真实需求;第二钻石(开发→交付)解决"做对方案",通过原型测试、A/B测试验证可行性。该模型强调低保真验证、多团队协作和真实用户测试,避免资源浪费与伪需求开发。典型应用场景包括产品功能优化、用户体验提升等需要精准落地的需求场景。核心价值在于建立从用户痛点到解决方案的可控闭

奶爸的编程之路,也就一周冷个三天 319

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

DFS

weixin_60869516的博客 1219

干货|C#上位机与西门子PLC的Profinet协议通信开发(工控机版)

文章摘要: Profinet是西门子主导的工业以太网协议,支持实时通信(RT/IRT),广泛应用于PLC与工控机通信。本文聚焦C#上位机通过S7协议(集成于Profinet接口)高效访问西门子PLC(S7-1200/1500等),提供完整开发方案: 协议基础:解析Profinet三层架构(TCP/IP层、实时层、应用层),对比S7协议优势(开发便捷、跨平台); 开发实践:基于S7NetPlus/Snap7库实现数据读写,涵盖DB块、I/O点等地址规则; 环境配置:工控机(Windows/Linux/统信UO

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1213

TI Sitara系列AM64x开发板(双核ARM Cortex-A53)软硬件规格书

创龙科技TL64x-EVM是一款基于TI Sitara系列AM64x双核ARM Cortex-A53 + 单/四核Cortex-R5F + 单核Cortex-M4F多核处理器设计的高性能评估板,由核心板和评估底板组成。评估板接口资源丰富,引出5x Ethernet(两路支持TSN)、2x CAN-FD、多路UART、多路DI/DO、GPMC、PCIe、USB等接口,板载WIFI模块,支持4G/5G模块、NVME硬盘,可选配外壳直接应用于工业现场,方便用户快速进行产品方案评估与技术预研。

创龙,嵌入式一体化解决方案商 727

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

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

wzw-yali的博客 1691

从0到1打造一台机器人走起来

1)本体机械结构设计,依据人体生物学和生物力学知识,结合机器人运动时各关节扭矩需求,进行合理选用电机,比如胯部需要大扭矩,腿部惯量小等2)硬件拓扑上,分层架构的信号层和功率协同工作,高带宽,低延时,硬实时3)步态规划设计与验证环节实机回溯和部署过程:Real2Sim,Sim2Sim,Sim2Real。

weixin_43163941的博客 244

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

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

BZOJ 1413: [ZJOI2009]取石子游戏

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

aisen1985的博客 246

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

省选+NOI 第九部分 博弈论

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

青少年趣味编程 4342

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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、付费专栏及课程。

余额充值