石子专题

简单取石子游戏~博弈

很坑爹的小游戏,至于怎么坑爹,嘎嘎~自己研究去吧~! #include<stdio.h>#include<windows.h>#include<iostream>#include<string.h>#include<time.h>using namespace std;void Loc(int x,int y);/*定位光标*/void Welcome(); /*创建欢迎界面*/

NYOJ 737 石子合并(一)(环形)

OJ题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=737 参考资料:http://wenku.baidu.com/view/b4dbe923482fb4daa58d4b84.html (感觉解释的很好) 描述     有N堆石子排成一排,每堆石子有一定的数量。现要将N堆石子并成为一堆。合并的过程只能每次将相邻的两堆石子堆成一堆,每次

【数论 排序 滑动窗口】1040. 移动石子直到连续 II

本文涉及知识点 排序 质数、最大公约数、菲蜀定理 C++算法:滑动窗口总结 LeetCode1040. 移动石子直到连续 II 在一个长度 无限 的数轴上,第 i 颗石子的位置为 stones[i]。如果一颗石子的位置最小/最大,那么该石子被称作 端点石子 。 每个回合,你可以将一颗端点石子拿起并移动到一个未占用的位置,使得该石子不再是一颗端点石子。 值得注意的是,如果石子像 stones

AcWing 282. 石子合并

必看的视频讲解↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 【E28【模板】区间DP 石子合并——信息学竞赛算法】 合并过程总开销等于红色数字总和,可以理解为花费的总体力! f数组的含义是f【i】【j】是从第i堆石子开始到第j堆石子的花费体力最小值 如何理解三层for呢? 第一层for是控制区间长度len,第二层for是控制区间起点位置i,第三层for是控制区间

石子合并-环(区间dp)c++

刚才的《石子合并》问题是把石子放成一排,如果石子放成一个环,第 N 堆和第 1 堆相邻,又该怎么做呢? 我们要想办法把它变成之前放成一排的问题,可以发现只要我们把 a1​,a2​,a3​,⋯,aN​a2​,a3​,a4​,⋯,aN​,a1​a3​,a4​,a5​,⋯,aN​,a1​,a2​…aN​,a1​,a2​,⋯,aN−1​ 这 N 种放成一排的情况都考虑清楚,取其中的最优解,就

石子归并---区间型动态规划

题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1]。问安排怎样的合并顺序,能够使得总合并代价达到最小。 输入描述 Input Description 第一行一个整数n(n<=100) 第二行n个整数w1,w2...wn  (wi <= 100) 输出描述 Output

1109:取石子游戏

题目描述 一天小明和小红在玩取石子游戏,游戏规则是这样的: (1)本游戏是一个二人游戏; (2)有一堆石子,共有n个; (3)两人轮流进行; (4)每走一步可以取走1~m个石子; (5)最先取光石子的一方为胜。 如果游戏的双方使用的都是最优策略,请输出哪个人能赢。 输入格式 输入的第一行是一个正整数C(C<=100),表示有C组测试数据。 每组输入两个整数n和m(1<=n,m<=1000)

POJ1067 取石子游戏(博弈论)

取石子游戏 Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 36633 Accepted: 12396 Description 有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者

【石子合并】

题目 错解 #include <bits/stdc++.h>using namespace std;const int N = 310;int a[N], s[N], f[N][N];int main(){int n;cin >> n;memset(f, 0x3f, sizeof f);for(int i = 1; i <= n; i++){cin >> a[i];s[i]

Applese 的取石子游戏

【题目描述】 Applese 和 Bpplese 在玩取石子游戏,规则如下: 一共有偶数堆石子排成一排,每堆石子的个数为 ai。两个人轮流取石子,Applese先手。每次取石子只能取最左一堆或最右一堆,且必须取完。最后取得的石子多者获胜。假设双方都足够聪明,最后谁能够获胜呢? 【输入描述】 第一行是一个正偶数 n,表示石子的堆数。 第二行是 n 个正整数 a1,a2,…,an,表示每堆石子的个数

CSDN 编程挑战 彩色石子

转载请注明出处http://blog.csdn.net/beluma123,谢谢!        这是CSDN英雄会中的一道题,详见:原题链接.题目如下:有一行彩色的棋子,每个棋子的颜色是k种颜色之一.你不能改变棋子的顺序,但是可以移走一些棋子。问至少移走多少个石子,才能使得两个同色得石子之间没有其他颜色的棋子?(额...原题怎么一会石子一会又棋子的,明确起见,本文后面全部改用棋子)

HDU 1527 取石子游戏 威佐夫博弈

题目来源:HDU 1527 取石子游戏 题意:中文 思路:威佐夫博弈 必败态为 (a,b ) ai + i = bi     ai = i*(1+sqrt(5.0)+1)/2   这题就求出i然后带人i和i+1判断是否成立 以下转自网上某总结 有公式ak =[k(1+√5)/2],bk= ak + k  (k=0,1,2,…,n 方括号表示取整函数)  其中出现了黄金分割数(1+√5)/

NYoj - 833 取石子(七)

取石子(七) 时间限制: 1000 ms  |  内存限制: 65535 KB 难度: 1 描述 Yougth和Hrdv玩一个游戏,拿出n个石子摆成一圈,Yougth和Hrdv分别从其中取石子,谁先取完者胜,每次可以从中取一个或者相邻两个,Hrdv先取,输出胜利着的名字。 输入 输入包括多组测试数据。 每组测试数据一个n,数据保证int范围内。 输出 输出胜利者

nyoj-23-取石子(一)

#include<stdio.h> int main() {  int s;  scanf("%d",&s);  while(s--)  {   int n,m;   scanf("%d%d",&n,&m);   if(n%(m+1)==0)    printf("Lose\n");   else printf("Win\n");  }  ret

POJ 1179 Polygon(动态规划:类似环形石子合并)

点击打开链接 题意:给出一个多边形,切断某一条边,求出所有边合并后的最大值。 注意:最大值可能由最小值得来(负负得正)!所以要用两个dp数组维护。 第一次提交:WA,因为dMin[i][j] = getMin ( dMin[i][j], 那里直接复制前面的dMax[i][j] = getMax。 dMax没有改成dMin。。。。 第二次:PE,因为判断是否为第一个答案时用:

ACW石子合并-XMUOJ元素共鸣:唤醒神之眼 -区间DP

题目 思路 话不多说,直接上代码 代码 /*ACW石子合并-XMUOJ元素共鸣:唤醒神之眼 JinlongW-2024/05/25 区间DP当i<j时,f[i][j]=min(f[i][k]+f[k][j]+s[j]-s[i-1])当i=j时,f[i][j]=0最终答案:f[1][n] *//*区间DP模板:所有的区间dp问题枚举时,第一维通常是枚举区间长度,并且一般

1255: 石子合并

时间限制: 1 Sec  内存限制: 128 MB 提交: 1456  解决: 779 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 现在有n堆石子,你每次可以挑任意两堆将其合并成一堆,代价是两堆石子的数量和。可知经过n-1次合并后只剩下一堆石子,现在要求总代价最小,请求出合并石子的最小总代价。 输入 第一行一个n(0 < n <= 10000),代表有n堆石子,接下来一行n个由

hdu2177 取(2堆)石子游戏

取(2堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 722 Accepted Submission(s): 438 Problem Description 有两堆石子,数量任意,可以不同。游戏开始由两个人轮流

hdu1527取石子游戏(威佐夫博奕)

Problem Description 有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。 Input 输入包含若干行,表示若干

杭电1527-取石子游戏(威佐夫博弈)

取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2591    Accepted Submission(s): 1253 Problem Description 有两堆石子,数量任意,可以不同。游戏开始由两

动态规划 区间合并,合并相邻的石子

设有N堆石子排成一排,其编号为1,2,3,…,N。 每堆石子有一定的质量,可以用一个整数来描述,现在要将这N堆石子合并成为一堆。 每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。 例如有4堆石子分别为 1 3 5 2, 我们可以先合并1、2堆,代价为4,得到4 5 2, 又合并 1,2堆,代价

捡石子的商人

从前有一个年轻的商人,在黑暗的山谷里面走夜路。天很黑,他迷路了。他找不到那走出大山的方向,看不到星星和月亮,冷冷的山风飕飕的吹过来,他的头发都立起来了。突然,他听到夜空中传来一个声音,那声音不知道从那里传来的,那声音对他说:“年轻人,地上有石子,捡几颗,天亮了,会有用的。”他感到非常地恐惧,那声音一遍一遍的响起来:“年轻人,地上有石子,捡几颗,天亮了,会有用的。”最后那声音几乎是在哀求了:“年轻

51Nod 1022 石子归并 V2 (划分型dp四边形不等式优化)

石子归并以前做过好几次,是经典划分型dp题之一,一直用的O(n3)的正常dp方法,也从未想过该怎么去优化它。 直到昨天做这道题,n的范围由往常的100改为了1000,老方法 一直超时,苦不堪言,搜到有个四边形不等式的优化方法,看帖子,画式子,拉着学长帮忙推导,总算是大概弄明白了一点。 dp(i,j) = min(dp(i,k)+dp(k+1,j)) + w(i,j);(i < j

ACWING282. 石子合并(区间dp)

设有N堆石子排成一排,其编号为1,2,3,…,N。 每堆石子有一定的质量,可以用一个整数来描述,现在要将这N堆石子合并成为一堆。 每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。 例如有4堆石子分别为 1 3 5 2, 我们可以先合并1、2堆,代价为4,得到4 5 2, 又合并 1,2堆,代价

P1775 石子合并(弱化版) 题解

题目传送门 分析 此题做法有好几种,其中一种是 dp,还有一种是记忆化搜索。 我们知道暴力 dfs 非常慢,但是加上记忆化优化后会原地起飞。 dfs(l,r)表示合并区间 [ l , r ] [l,r] [l,r] 的最小价值,那么我们枚举 [ l , r ] [l,r] [l,r] 间的一个中转点 i i i,答案就是: 不合并;合并,加上代价; 取最小值。 dfs(l,r)

取石子游戏题解

题目链接 http://ybt.ssoier.cn:8088/problem_show.php?pid=1218 题目描述 题意分析: 首先只能进行辗转相除,所以很明显先表示出来。当a/b>=2的时候,先手可以操控后面的所有次序,并且一直让自己拿到a/b>=2的情况。 打个比方38/14 辗转的过程如下: 1、38/14=2…10 2、 14/10=1…4 3、 10/4=2…2 4、