刚才的《石子合并》问题是把石子放成一排,如果石子放成一个环,第 N 堆和第 1 堆相邻,又该怎么做呢? 我们要想办法把它变成之前放成一排的问题,可以发现只要我们把 a1,a2,a3,⋯,aNa2,a3,a4,⋯,aN,a1a3,a4,a5,⋯,aN,a1,a2…aN,a1,a2,⋯,aN−1 这 N 种放成一排的情况都考虑清楚,取其中的最优解,就
题目来源: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)/
#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
取(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 有两堆石子,数量任意,可以不同。游戏开始由两个人轮流
Problem Description 有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。 Input 输入包含若干行,表示若干
取石子游戏 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2591 Accepted Submission(s): 1253 Problem Description 有两堆石子,数量任意,可以不同。游戏开始由两
题目传送门 分析 此题做法有好几种,其中一种是 dp,还有一种是记忆化搜索。 我们知道暴力 dfs 非常慢,但是加上记忆化优化后会原地起飞。 dfs(l,r)表示合并区间 [ l , r ] [l,r] [l,r] 的最小价值,那么我们枚举 [ l , r ] [l,r] [l,r] 间的一个中转点 i i i,答案就是: 不合并;合并,加上代价; 取最小值。 dfs(l,r)