题目描述 Farmer John's cows like to play coin games so FJ has invented with a new two-player coin game called Xoinc for them. Initially a stack of N (5 <= N <= 2,000) coins sits on the ground; coin i from the top has integer value C_i (1 <= C_i <=…
题目描述 Farmer John's cows like to play coin games so FJ has invented with a new two-player coin game called Xoinc for them. Initially a stack of N (5 <= N <= 2,000) coins sits on the ground; coin i from the top has integer value C_i (1 <= C_i <=…
题目描述 Farmer John's cows like to play coin games so FJ has invented with a new two-player coin game called Xoinc for them. Initially a stack of N (5 <= N <= 2,000) coins sits on the ground; coin i from the top has integer value C_i (1 <= C_i <=…
https://daniu.luogu.org/problemnew/show/P2964 dp[i][j] 表示桌面上还剩i枚硬币时,上一次取走了j个的最大得分 枚举这一次要拿k个,转移到dp[i-k][k] dp[i][j]=max(sum[i]-dp[i-k][k]) 因为 上一次取走j个和取走j-1个 k的取值范围 只相差 2*j-1 和 2*j 所以 直接 dp[i][j]=dp[i][j-1] 然后k分别等于  2*j-1 和 2*j,转移 最后输出dp[n][1],因为先手可以拿1…
题目描述 Farmer John's cows like to play coin games so FJ has invented with a new two-player coin game called Xoinc for them. Initially a stack of N (5 <= N <= 2,000) coins sits on the ground; coin i from the top has integer value C_i (1 <= C_i <=…
题意:n颗硬币 两个人从前往后按顺序拿 如果上一个人拿了i颗 那么下一个可以拿1-2*i颗 问先手能获得的最大收益 题解:比较典型的最大最小最大最小..DP了 但是暴力做的话是n^3 所以就体现出了这个题的巧妙之处  dp[i][j]表示拿到了第i颗上一个人拿了j颗 dp[i][j]由 dp[i + k][k] k = 1,2...2 * j转移来 dp[i][j - 1]由 dp[i + k][k] k = 1,2...2 * (j - 1)转移来 有许多状态是一样的 所以dp[i][j-1]…
LINK : coin game 这道题 超级经典去年这个时候我就看过题目了 但时至今日还不会/cy 觉得在做比赛的题目的时候少写省选的题目 多做水题多做不难也不简单的题目就好了. 由于我是真的不会博弈上dp(其实我博弈都不太会...故写这道题的时候没有过多的思考只是草草想了一波状态就直接看题解了发现状态都列错了. 当我 理解题解中的做法感觉还不是特别的自然故写一篇题解来印证自己的理解. 这里我写上最初始的思路吧 题目中想让我们两个玩家都选择最优的情况下 第一个玩家最多能获得多少的钱.看起来是一…
一道DP,思维难度真是不小. 首先对于这个题的数据,我们可以发现差不多可以支持n^2logn,但是貌似也不会有这种复杂度的线性DP(至少这个题看上去不是这样).所以我们考虑N^2做法.因为求得是价值和,所以很明显要使用前缀和. 我们用f[i][j]来表示从下往上i枚硬币时轮到第一个人选,上一次对方取了j枚硬币时的情况.则根据题意这个人此时能取t枚(t<=i),此时这个人可以去那么此时取到的最大值就是max(f[i][j],f[i-t][t]).又因为t的数目确实比较庞大,无法一个个枚举,所以考虑…
博弈论+dp 依旧是博弈论的壳子,但问的是最大值,所以要dp 设 dp[i][j] 表示该取 i 号硬币,上一次取了 j 个的先手能取的最大值, 因为每次从小到大枚举复杂度太高,所以我们要从 dp[i][i - 1] 转移,每次新加两个状态即可 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using n…
SP5271 XOINC - A Coin Game 双倍经验:P2964 [USACO09NOV]硬币的游戏A Coin Game O3做法(TLE):枚举i,j,k,即剩下i枚金币,上一轮选了j枚金币,这一轮选k(1<=k<=j * 2)枚金币. O2做法 1:容易发现,对于[j-1],k枚举范围为1~2j-2:对于[j],k的范围只增加了2j-1,2j两项,可以枚举i,j,再由[j-1]的状态继续判断2j-1,2j两项(sum为前缀和) #include<bits/stdc++.h…
Description Alice和Bob现在在玩的游戏,主角是依次编号为1到n的n枚硬币.每一枚硬币都有两面,我们分别称之为正面和反面.一开始的时候,有些硬币是正面向上的,有些是反面朝上的.Alice和Bob将轮流对这些硬币进行翻转操作,且Alice总是先手.具体来说每次玩家可以选择一枚编号为x,要求这枚硬币此刻是反面朝上的.对于编号x来说,我们总可以将x写成x=c*2^a*3^b,其中a和b是非负整数,c是与2,3都互质的非负整数,然后有两种选择第一种,选择整数p,q满足a>=p*q,p>…
: 博弈游戏·Nim游戏 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 今天我们要认识一对新朋友,Alice与Bob.Alice与Bob总是在进行各种各样的比试,今天他们在玩一个取石子的游戏.在这个游戏中,Alice和Bob放置了N堆不同的石子,编号1..N,第i堆中有A[i]个石子.每一次行动,Alice和Bob可以选择从一堆石子中取出任意数量的石子.至少取1颗,至多取出这一堆剩下的所有石子.Alice和Bob轮流行动,取走最后一个石子的人获得胜利.假设每一轮游…
Nim游戏的概述: 还记得这个游戏吗?给出n列珍珠,两人轮流取珍珠,每次在某一列中取至少1颗珍珠,但不能在两列中取.最后拿光珍珠的人输.后来,在一份资料上看到,这种游戏称为“拈(Nim)”.据说,它源自中国,经由被贩卖到美洲的奴工们外传.辛苦的工人们,在工作闲暇之余,用石头玩游戏以排遣寂寞.后来流传到高级人士,则用便士(Pennies),在酒吧柜台上玩.最有名的玩法,是把十二枚便士放成3.4.5三列,拿光铜板的人赢.后来,大家发现,先取的人只要在3那列里取走2枚,变成了1.4.5,就能稳操胜券了…
Nim游戏的概述: 还记得这个游戏吗? 给出n列珍珠,两人轮流取珍珠,每次在某一列中取至少1颗珍珠,但不能在两列中取.最后拿光珍珠的人输. 后来,在一份资料上看到,这种游戏称为"拈(Nim)".据说,它源自中国,经由被贩卖到美洲的奴工们外传.辛苦的工人们,在工作闲暇之余,用石头玩游戏以排遣寂寞.后来流传到高级人士,则用便士(Pennies),在酒吧柜台上玩. 最有名的玩法,是把十二枚便士放成3.4.5三列,拿光铜板的人赢.后来,大家发现,先取的人只要在3那列里取走2枚,变成了1.4.5…
翻硬币 小明正在玩一个"翻硬币"的游戏. 桌上放着排成一排的若干硬币.我们用 * 表示正面,用 o 表示反面(是小写字母,不是零). 比如,可能情形是:oooooo 如果同时翻转左边的两个硬币,则变为:oooooooo 现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢? 我们约定:把翻动相邻的两个硬币叫做一步操作,那么要求: 程序输入: 两行等长的字符串,分别表示初始状态和要达到的目标状态.每行的长度<1…
问题描述 小明正在玩一个“翻硬币”的游戏. 桌上放着排成一排的若干硬币.我们用 * 表示正面,用 o 表示反面(是小写字母,不是零). 比如,可能情形是:**oo***oooo 如果同时翻转左边的两个硬币,则变为:oooo***oooo 现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢? 我们约定:把翻动相邻的两个硬币叫做一步操作,那么要求: 输入格式 两行等长的字符串,分别表示初始状态和要达到的目标状态.每行的长度<1…
[BZOJ1434][ZJOI2009]染色游戏(博弈论) 题面 BZOJ 洛谷 题解 翻硬币的游戏我似乎原来在博客里面提到过,对于这类问题,当前局面的\(SG\)函数就是所有反面朝上的硬币单一存在时的\(SG\)函数的异或和.现在要考虑的是如何求解单一硬币存在于场上时的\(SG\)函数,这种东西....打表吧... #include<iostream> #include<cstdio> #include<cmath> using namespace std; inli…
目录 1 问题描述 2 解决方案   1 问题描述 问题描述 小明正在玩一个“翻硬币”的游戏. 桌上放着排成一排的若干硬币.我们用 * 表示正面,用 o 表示反面(是小写字母,不是零). 比如,可能情形是:**oo***oooo 如果同时翻转左边的两个硬币,则变为:oooo***oooo 现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢? 我们约定:把翻动相邻的两个硬币叫做一步操作,那么要求: 输入格式 两行等长的字符串…
NIM取子游戏是由两个人面对若干堆硬币(或石子,或..)进行的游戏,游戏由两个人进行,设有k>=1堆硬币,各堆含有n1,n2,n3,n4.....,nk个硬币,游戏的目的就是选取最后剩下的硬币.游戏规则如下: 1)游戏人交替进行游戏: 2)当轮到每个游戏人取子时,选择这些硬币中的一堆,并从所选的堆中取走至少一枚硬币(可以将所选堆中所有硬币全部取走剩下一个空堆). 当所有堆变成空堆时,游戏结束.最后取子的人(即能够取走最后一堆中的所有硬币的人)获胜. 这个问题中的变量是堆数k和各堆的硬币数n1,n…
题目描述: 你有n种不同面值的硬币,每种面值的硬币都有无限多个,为了方便购物,你希望带尽量少的硬币,并且要能组合出 1 到 m 之间(包含1和m)的所有面值. 输入描述: 第一行包含两个整数:m ,n(1 ≤ n ≤ 100,1 ≤ m ≤ 109),意义如题目描述.接下来的 n 行,每行一个整数,第 i + 1 行的整数表示第 i 种硬币的面值. 输出描述: 输出一个整数,表示最少需要携带的硬币数量,再输出以空格为分隔的一串整数,表示对应的硬币面值.如果无解,则输出-1. 示例: 输入:20…
以下笔记摘自计算机丛书组合数学,机械工业出版社. Nim取石子游戏 Nim(来自德语Nimm!,意为拿取)取石子游戏. 前言: 哇咔咔,让我们来追寻娱乐数学的组合数学起源! 游戏内容: 有两个玩家面对若干堆东西(硬币,石子,豆子···)进行游戏.设有k≥1堆硬币,各堆分别含有n1,n2...nk枚硬币. 游戏规则: (1):游戏中两个人交替进行游戏(我们称第一个取的为1号,第二个取的为2号). (2):当玩家取石子的时候,先选择硬币中的一堆,然后可以从堆中取走任意数量的硬币. 当所有的堆为空时,…
Alice和Bob这一次准备玩一个关于硬币的游戏:N枚硬币排成一列,有的正面朝上,有的背面朝上,从左到右依次编号为1..N.现在两人轮流翻硬币,每次只能将一枚正面朝上的硬币翻过来,并且可以随自己的意愿,在一枚硬币翻转后决定要不要将该硬币左边的任意一枚硬币也翻一次(正面翻到背面或背面翻到正面).翻最后一枚正面向上的硬币的人获胜.同样的,这次游戏里面Alice仍然先手,两人均采取最优的策略,对于给定的初始局面,Alice会获胜还是Bob会获胜? 题意: 要使得所有硬币背面向上.每次只能反转一个正面向…
传送门 题目1 : 博弈游戏·Nim游戏·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Alice和Bob这一次准备玩一个关于硬币的游戏:N枚硬币排成一列,有的正面朝上,有的背面朝上,从左到右依次编号为1..N.现在两人轮流翻硬币,每次只能将一枚正面朝上的硬币翻过来,并且可以随自己的意愿,在一枚硬币翻转后决定要不要将该硬币左边的任意一枚硬币也翻一次(正面翻到背面或背面翻到正面).翻最后一枚正面向上的硬币的人获胜.同样的,这次游戏里面Alice仍然先手,两人均采…
Nim游戏证明参见: 刘汝佳训练指南P135-写的很酷! 知乎上SimonS关于Nim博弈的回答! Nim游戏的概述: 还记得这个游戏吗? 给出n列珍珠,两人轮流取珍珠,每次在某一列中取至少1颗珍珠,但不能在两列中取.最后拿光珍珠的人输. 后来,在一份资料上看到,这种游戏称为"拈(Nim)".据说,它源自中国,经由被贩卖到美洲的奴工们外传.辛苦的工人们,在工作闲暇之余,用石头玩游戏以排遣寂寞.后来流传到高级人士,则用便士(Pennies),在酒吧柜台上玩. 最有名的玩法,是把十二枚便士…
第33关 逻辑之路 判断secretB 非真,走上面:否则,走下面(这里面要先自己进行逻辑判断)if…else语句或者这样用(不用自己进行判断) // 如果 secretB 非真,走上面:否则,走下面. var secretE = !secretB; if (secretE) { hero.moveXY(44, 33); } else { hero.moveXY(44, 15); } // 从巫师那得到两个秘密的true/false值. // 查看提示,可以了解如何编写逻辑表达式. hero.m…
Coin Change Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 16592 Accepted Submission(s): 5656 Problem Description Suppose there are 5 types of coins: 50-cent, 25-cent, 10-cent, 5-cent, and 1-cent.…
题目描述 小明正在玩一个"翻硬币"的游戏.桌上放着排成一排的若干硬币.我们用 * 表示正面,用 o 表示反面(是小写字母,不是零). 比如,可能情形是:**oo***oooo 如果同时翻转左边的两个硬币,则变为:oooo***oooo 现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢? 输入格式 两行等长的字符串,分别表示初始状态和要达到的目标状态.每行的长度<5000000 输出格式 一个整数,表示最小…
问题描述 小明正在玩一个"翻硬币"的游戏. 桌上放着排成一排的若干硬币.我们用 * 表示正面,用 o 表示反面(是小写字母,不是零). 比如,可能情形是:**oo***oooo 如果同时翻转左边的两个硬币,则变为:oooo***oooo 现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢? 我们约定:把翻动相邻的两个硬币叫做一步操作,那么要求: 输入格式 两行等长的字符串,分别表示初始状态和要达到的目标状态.每行…
AcWing 1208. 翻硬币 原题链接 小明正在玩一个"翻硬币"的游戏. 桌上放着排成一排的若干硬币.我们用 * 表示正面,用 o 表示反面(是小写字母,不是零). 比如,可能情形是:**oo***oooo 如果同时翻转左边的两个硬币,则变为:oooo***oooo 现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢? 我们约定:把翻动相邻的两个硬币叫做一步操作. 输入格式 两行等长的字符串,分别表示初始状态…
问题描述 小明正在玩一个"翻硬币"的游戏. 桌上放着排成一排的若干硬币.我们用 * 表示正面,用 o 表示反面(是小写字母,不是零). 比如,可能情形是:**oo***oooo 如果同时翻转左边的两个硬币,则变为:oooo***oooo 现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢? 我们约定:把翻动相邻的两个硬币叫做一步操作,那么要求: 输入格式 两行等长的字符串,分别表示初始状态和要达到的目标状态.每行…