策略类题目

来源:互联网 发布:演员尊龙相貌知乎 编辑:程序博客网 时间:2024/06/08 03:49

1. 桌子上有2014枚棋子,甲乙两人轮流取走棋子.规则是:每人每次取的个数是1枚至5枚,谁最后取光桌上的棋子谁就获胜.如果甲先取,那么甲先取______枚棋子,才能保证自己必胜。


2014÷(1+5),
=2014÷6,
=335(次)…4(个);
只要甲先取4个,然后再看看乙每次取几个,只要每次与乙所取棋子数和满足是6,甲就能取胜.
答:应选取4个,然后再看乙每次取几个,只要每次与乙所取棋子数和满足是6,甲就能取胜.
故答案为:4.


2. LeetCode blog: Coins in a Line

问题:There are n coins in a line. Two players take turns to take acoin from one of the ends of the line until there are no more coinsleft. The player with the larger amount of money wins. Assume thatyou go first, describe an algorithm to compute the maximum amountof money you can win.


题目的要求是自己先拿硬币,那自己可以拿第一个或者最后一个,但是如何决定要拿哪一个就需要依靠子问题的结果了,这就是典型的DP思路了。首先想到了这个公式
dp[i][j]=max(A[i]+sum[i+1][j]-dp[i+1][j],A[j]+sum[i][j-1]-dp[i][j-1])

dp[i][j]代表从第i个硬币到第j个硬币这个子问题的结果,也就是可以拿到的最大钱数。那么你有两种选择
1. 如果你取第一个的话,剩下的子问题就变成了(i+1,j)了,由于轮到对方取了,因此对方可以得到dp[i+1][j]的钱数,而你则得到sum[i+1,j]-dp[i+1][j]的钱数,也就是剩余的钱数。
2. 如果你取最后一个的话,同理。

再分析方程A[i]+sum[i+1][j]=sum[i][j],A[j]+sum[i][j-1]=sum[i][j]
因此方程可以简化为
dp[i][j]=max(sum[i][j]-dp[i+1][j],sum[i][j]-dp[i][j-1])=sum[i][j]-min(dp[i+1][j],dp[i][j-1])

3. 黑板上有一排数为1,2,3,4,……19,20。甲乙两人轮流划掉任意相邻的两个数,如果甲划过之后乙再也划不成了,甲就算胜了,甲有必胜的把握吗?他应怎么做?

甲第一次划掉中间的两个,之后左右各9个,甲只要根据乙划掉的那对数,对称着划就可以了。


4. 现有2N个数字,排成一排,甲乙两人轮流从两端的任意一点取走一个数字。最后甲乙各拿N个数,求和后,和较大的胜。问先拿者有无必胜(不考虑平局)策略。

先拿者实际上可以控制自己全取偶数位或全取奇数位,因此只要算下偶数位的和,奇数位的和哪个大,然后先手就一直取偶数位或奇数位就可以了。

0 0
原创粉丝点击