刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

有 N 张扑克牌叠放在桌上,A 和 B 两人轮流抽牌,每次只能从最上面或最下面抽一张牌,当最后一张牌被抽完时,比较 A 和 B 两人扑克牌的点数总和,点数总和大的一方胜利,点数相同时双方均不算胜利。A 先抽牌,请统计一共有多少种不同的抽牌情况,A 有多少种不同的获胜情况。

例如:N = 3,有 3 张扑克牌,从上往下的点数依次为 3、2、1。A 先抽牌,所有不同的抽取情况有:

第一种:A 抽 3,B 抽 1,A 再抽 2,A 的点数总和为 5,B 的点数总和为 1;第二种:A 抽 3,B 抽 2,A 再抽 1,A 的点数总和为 4,B 的点数总和为 2;第三种:A 抽 1,B 抽 3,A 再抽 2,A 的点数总和为 3,B 的点数总和为 3;第四种:A 抽 1,B 抽 2,A 再抽 3,A 的点数总和为 4,B 的点数总和为 2;一共有 4 种不同的抽牌情况,A 有 3 种不同的获胜情况。

输入描述:

第一行输入一个整数 N(2≤N≤20),表示扑克牌的张数

第二行输入 N 个整数(1≤整数≤13),同一个整数不能出现超过 4 次,表示从上往下每张扑克牌的点数, 整数之间以一个空格隔开

输出描述:

第一行输出一个整数,表示一共有多少种不同的抽牌情况第二行输出一个整数,表示 A 有多少种不同的获胜情况


样例输入:

3
3 2 1

样例输出:

4
3

使用微信搜索喵呜刷题,轻松应对考试!

答案:

br />```123```

解析:

【喵呜刷题小喵解析】
对于这个问题,我们可以使用动态规划来解决。

首先,我们定义一个二维数组dp[i][j],其中i表示当前剩余的牌数,j表示当前A的点数总和。dp[i][j]表示在剩余的i张牌中,A的点数总和为j的方案数。

对于状态转移,我们可以考虑A抽最上面一张牌和抽最下面一张牌两种情况。

1. 如果A抽最上面一张牌,那么B只能抽最下面一张牌,此时A的点数总和变为j+top,B的点数总和变为j+bottom,状态转移方程为dp[i-2][j+top+bottom] += dp[i][j]。

2. 如果A抽最下面一张牌,那么B只能抽最上面一张牌,此时A的点数总和变为j+bottom,B的点数总和变为j+top,状态转移方程为dp[i-2][j+top+bottom] += dp[i][j]。

最终,dp[1][j]表示A抽完牌后,A的点数总和为j的方案数,我们需要遍历所有的j,并统计dp[1][j]的和,即为总的抽牌情况数。

对于A的获胜情况,我们需要遍历所有的j,如果dp[1][j] > 0,说明存在一种方案使得A抽完牌后,A的点数总和为j,此时我们需要判断j是否大于B的点数总和,如果大于,则说明A获胜,将dp[1][j]累加到获胜情况数中。

对于样例输入3 3 2 1,我们可以按照上述方法计算总的抽牌情况数和A的获胜情况数,分别为12和3。
创作类型:
原创

本文链接:有 N 张扑克牌叠放在桌上,A 和 B 两人轮流抽牌,每次只能从最上面或最下面抽一张牌,当最后一张牌

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share