2021-12-08:扑克牌中的红桃J和梅花Q找不到了,为了利用剩下的牌做游戏,小明设计了新的游戏规则:

  1. A,2,3,4…10,J,Q,K分别对应1到13这些数字,大小王对应0;
  2. 游戏人数为2人,轮流从牌堆里摸牌,每次摸到的牌只有“保留”和“使用”两个选项,且当前轮必须做出选择;
  3. 如果选择“保留”当前牌,那么当前牌的分数加到总分里,并且可以一直持续到游戏结束;
  4. 如果选择“使用”当前牌,那么当前牌的分数*3,加到总分上去,但是只有当前轮,下一轮,下下轮生效,之后轮效果消失。
  5. 每一轮总分大的人获胜。
    假设小明知道每一轮对手做出选择之后的总分,返回小明在每一轮都赢的情况下,最终的最大分是多少?
    如果小明怎么都无法保证每一轮都赢,返回-1。
    来自字节跳动。

答案2021-12-08:

递归。
当前来到index位置,牌是cands[index]值。
对手第i轮的得分,sroces[i]。
int hold : i之前保留的牌的总分。
int cur : 当前轮得到的,之前的牌只算上使用的效果,加成是多少。
int next : 之前的牌,对index的下一轮,使用效果加成是多少。
返回值:如果i…最后,不能全赢,返回-1。
如果i…最后,能全赢,返回最后一轮的最大值。

代码用golang编写。代码如下:

package main

import "fmt"

func main() {
cands := []int{1, 3, 4, 5}
sroces := []int{1, 3, 4, 5}
ret := f(cands, sroces, 0, 0, 0, 0)
fmt.Println(ret)
} func f(cands []int, sroces []int, index, hold, cur, next int) int {
if index == 25 { // 最后一张
all := hold + cur + cands[index]*3
if all <= sroces[index] {
return -1
}
return all
}
// 不仅最后一张
// 保留
all1 := hold + cur + cands[index]
p1 := -1
if all1 > sroces[index] {
p1 = f(cands, sroces, index+1, hold+cands[index], next, 0)
}
// 爆发
all2 := hold + cur + cands[index]*3
p2 := -1
if all2 > sroces[index] {
p2 = f(cands, sroces, index+1, hold, next+cands[index]*3, cands[index]*3)
}
return getMax(p1, p2)
} // 26 * 341 * 78 * 39 = 2 * (10 ^ 7)
func process(cards, scores []int, index, hold, cur, next int) int {
if index == 25 {
all := hold + cur + cards[index]*3
if all > scores[index] {
return all
} else {
return -1
}
} else {
d1 := hold + cur + cards[index]
p1 := -1
if d1 > scores[index] {
p1 = process(cards, scores, index+1, hold+cards[index], next, 0)
}
d2 := hold + cur + cards[index]*3
p2 := -1
if d2 > scores[index] {
p2 = process(cards, scores, index+1, hold, next+cards[index]*3, cards[index]*3)
}
return getMax(p1, p2)
}
} // cur -> 牌点数 -> * 3 之后是效果
// next -> 牌点数 -> * 3之后是效果
func p(cands, sroces []int, index, hold, cur, next int) int {
if index == 25 { // 最后一张
all := hold + cur*3 + cands[index]*3
if all <= sroces[index] {
return -1
}
return all
}
// 不仅最后一张
// 保留
all1 := hold + cur*3 + cands[index]
p1 := -1
if all1 > sroces[index] {
p1 = f(cands, sroces, index+1, hold+cands[index], next, 0)
}
// 爆发
all2 := hold + cur*3 + cands[index]*3
p2 := -1
if all2 > sroces[index] {
p2 = f(cands, sroces, index+1, hold, next+cands[index], cands[index])
}
return getMax(p1, p2)
} func getMax(a, b int) int {
if a > b {
return a
} else {
return b
}
}

左神java代码

2021-12-08:扑克牌中的红桃J和梅花Q找不到了,为了利用剩下的牌做游戏,小明设计了新的游戏规则: 1) A,2,3,4....10,J,Q,K分别对应1到13这些数字,大小王对应0; 2) 游的更多相关文章

  1. 2021.12.08 P1848 [USACO12OPEN]Bookshelf G(线段树优化DP)

    2021.12.08 P1848 [USACO12OPEN]Bookshelf G(线段树优化DP) https://www.luogu.com.cn/problem/P1848 题意: 当农夫约翰闲 ...

  2. 2021.12.08 [SHOI2009]会场预约(平衡树游码表)

    2021.12.08 [SHOI2009]会场预约(平衡树游码表) https://www.luogu.com.cn/problem/P2161 题意: 你需要维护一个 在数轴上的线段 的集合 \(S ...

  3. 2021.12.08 平衡树——FHQ Treap

    2021.12.08 平衡树--FHQ Treap http://www.yhzq-blog.cc/fhqtreapzongjie/ https://www.cnblogs.com/zwfymqz/p ...

  4. 剑指offer-第六章面试中的各项能力(扑克牌中的顺子)

    //扑克牌的顺子 //题目:在一个扑克牌中随机的抽5张牌,看是不是顺子.大小王为0,A为1,J为11,Q为12,K为13.其他数字为自己本身. //思路:大小王可以代表任意一个数字,因此我们在看是不是 ...

  5. 剑指offer——71扑克牌中的顺子

    题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决 ...

  6. 【转载】【时序约束学习笔记1】Vivado入门与提高--第12讲 时序分析中的基本概念和术语

    时序分析中的基本概念和术语 Basic concept and Terminology of Timing Analysis 原文标题及网址: [时序约束学习笔记1]Vivado入门与提高--第12讲 ...

  7. 剑指XX游戏(六) - 轻松搞定面试中的红黑树问题

    原文地址 http://blog.csdn.net/silangquan/article/details/18655795?utm_source=tuicool&utm_medium=refe ...

  8. 2018.07.08 hdu4521 小明系列问题——小明序列(线段树+简单dp)

    小明系列问题--小明序列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Proble ...

  9. 2021.12.10 P2516 [HAOI2010]最长公共子序列(动态规划+滚动数组)

    2021.12.10 P2516 [HAOI2010]最长公共子序列(动态规划+滚动数组) https://www.luogu.com.cn/problem/P2516 题意: 给定字符串 \(S\) ...

  10. 今天遇到的面试题for(j=0,i=0;j<6,i<10;j++,i++) { k=i+j; } k 值最后是多少?

    for(j=0,i=0;j<6,i<10;j++,i++) { k=i+j; } k 值最后是多少? <script type="text/javascript" ...

随机推荐

  1. vue 作者在2022-2-7起宣布 vue3 正式作为默认版本

    vue 作者在2022-2-7起宣布 vue3 正式作为默认版本 vue 作者尤雨溪在知乎上发布一篇文章,宣布 Vue3 将在 2022 年 2 月 7 日 成为新的默认版本! 并且还在文章中做出了一 ...

  2. DRF_序列化and反序列化之高级

    1. source用法 序列化器内的使用 book_name = serializers.CharField(max_length=8, min_length=3,source='name')这个用来 ...

  3. celery在Django项目中的使用案例

    一.逻辑分析 第一步:在项目根目录新建包 第二步:在使用提交异步任务的位置,导入使用即可 视图函数中使用,导入任务 任务.delay() # 提交任务 第三步:启动worker,如果有定时任务,启动b ...

  4. SQL Injection(SQL注入)

    什么是SQL注入? SQL(结构化查询语言)注入,通常称为 SQLi,是对 Web 应用程序数据库服务器的攻击,会导致执行恶意查询.当 Web 应用程序使用未经正确验证的用户输入与数据库通信时,攻击者 ...

  5. Android笔记--在活动之间传递消息

    显式Intent和隐式Intent Intent--各个组件信息沟通的桥梁 组成部分: 显式Intent:--精确匹配 具体实现: 1.在Intent的构造函数中指定 2.调用意图对象的setClas ...

  6. 对于jsp页面中内嵌Java代码失败的解决方法(总是报出jsp类无法编译的错误)

    准备好接收奥!解决方法来啦! 在我这几天查看了好几遍内嵌的Java代码之后,没有发现什么语法上面的错误,看来错误应该就是出现在环境上面了,或者是有什么我没有注意到的小细节.还好,终于将"罪魁 ...

  7. iText5实现Java生成PDF

    参考代码:https://github.com/youcong1996/study_simple_demo 参考博客:https://blog.csdn.net/weixin_37848710/art ...

  8. arc145前三题

    为什么只有前三题呢...第四题想了一个小时没思路(主要是半个小时的时候发现看错题了),然后看粉兔博客发现要用Cantor集一类的神奇玩意,手贱看了E题发现还是线性基.于是就run了.NOIP前再学吧 ...

  9. 博客与AI

    最近AI自动生成技术文章和答案在圈子里面引起了很大轰动,Stack Overflow暂时拒绝接收GPT生成的结果.我也经常性地浏览或者编写博客,但是最近我使用new bing或者ChatGPT的过程中 ...

  10. 【LeetCode动态规划#02】图解不同路径I + II(首次涉及二维dp数组,)

    不同路径 力扣题目链接(opens new window) 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 "Start" ). 机器人每次只能向下或者向右移 ...