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框架开发的准备

    使用VUE框架编写项目的准备工作 防止我几天不打代码,忘记怎么打了 下载小乌龟拉取码云项目文件,用于码云仓库代码提交与拉取(可以不安装) 小乌龟要设置你的码云账号 密码 在控制面版 中 凭证里可以修改 ...

  2. 7. 基础增删改 - 创建管理员用Model-Drive App管理后台信息 - 创建Model-Driven App(什么是model-driven app)

    ​ 一..什么是Model-Driven App? Model-Driven App是一个以组件为中心的应用程序开发方法,它不需要通过代码来运行,而且可以根据自己的需求来设计布局,编写出各种简单或者复 ...

  3. DVWA-XSS (Reflected) 反射性 XSS

    反射性XSS,是非持久性,也是最常见的XSS,通过解析传入前段页面,常见为交互式输入框 LOW 审计源码 <?php // 发送请求头 header ("X-XSS-Protectio ...

  4. 【LeetCode回溯算法#10】图解N皇后问题(即回溯算法在二维数组中的应用)

    N皇后 力扣题目链接(opens new window) n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给你一个整数 n ,返回所有不同的 n 皇 ...

  5. 初认Spring

    官网地址:https://spring.io/ Spring Framework的系统架构 1.Core Contiainer:核心容器 2.AOP:面向切片编程 3.Aspects:AOP思想实现 ...

  6. 声网深度学习时序编码器的资源预测实践丨Dev for Dev 专栏

    本文为「Dev for Dev 专栏」系列内容,作者为声网大后端智能运营算法团队 算法工程师@黄南薰. 随着深度学习技术的发展,编码器的结构在构建神经网络中成为了热门之选,在计算机视觉领域有众多成功案 ...

  7. Vditor在原生JS中如何结合后端使用

    目录 1.Vditor介绍 2.如何在原生JS中结合后端使用 2.1 背景 2.2 正确使用方式 2.2.1 编辑页面 2.2.2 回显页面(修改页面) 2.2.3 预览页面 3.小结一下 1.Vdi ...

  8. salesforce零基础学习(一百二十五)零基础学习SF路径

    本篇参考: https://boulder-bard-27f.notion.site/Salesforce-Learning-e990864695674f07b99a5f8955770bd4 本篇背景 ...

  9. Spring Security 框架使用

    更多内容,前往IT-BLOG 一.Spring Security 简介 Spring Security 是一个能够为基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供 ...

  10. [思维提升|干货All in]6种算法解决LeetCode困难题:滑动窗口最大值

    为了更好的阅读体验,欢迎阅读原文: [思维提升|干货All in]6种算法解决LeetCode困难题:滑动窗口最大值 (eriktse.com) 最近在leetcode遇到一道非常经典的题目:239. ...