375. 猜数字大小 II

375. 猜数字大小 II

我们正在玩一个猜数游戏,游戏规则如下:

  1. 我从 1 到 n 之间选择一个数字。
  2. 你来猜我选了哪个数字。
  3. 如果你猜到正确的数字,就会 赢得游戏 。
  4. 如果你猜错了,那么我会告诉你,我选的数字比你的 更大或者更小 ,并且你需要继续猜数。
  5. 每当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。如果你花光了钱,就会 输掉游戏 。
    给你一个特定的数字 n ,返回能够 确保你获胜 的最小现金数,不管我选择那个数字 。

image.png

示例 1:输入:n = 10
输出:16
解释:制胜策略如下:
- 数字范围是 [1,10] 。你先猜测数字为 7 。- 如果这是我选中的数字,你的总费用为 $0 。否则,你需要支付 $7 。- 如果我的数字更大,则下一步需要猜测的数字范围是 [8,10] 。你可以猜测数字为 9 。- 如果这是我选中的数字,你的总费用为 $7 。否则,你需要支付 $9 。- 如果我的数字更大,那么这个数字一定是 10 。你猜测数字为 10 并赢得游戏,总费用为 $7 + $9 = $16 。- 如果我的数字更小,那么这个数字一定是 8 。你猜测数字为 8 并赢得游戏,总费用为 $7 + $9 = $16 。- 如果我的数字更小,则下一步需要猜测的数字范围是 [1,6] 。你可以猜测数字为 3 。- 如果这是我选中的数字,你的总费用为 $7 。否则,你需要支付 $3 。- 如果我的数字更大,则下一步需要猜测的数字范围是 [4,6] 。你可以猜测数字为 5 。- 如果这是我选中的数字,你的总费用为 $7 + $3 = $10 。否则,你需要支付 $5 。- 如果我的数字更大,那么这个数字一定是 6 。你猜测数字为 6 并赢得游戏,总费用为 $7 + $3 + $5 = $15 。- 如果我的数字更小,那么这个数字一定是 4 。你猜测数字为 4 并赢得游戏,总费用为 $7 + $3 + $5 = $15 。- 如果我的数字更小,则下一步需要猜测的数字范围是 [1,2] 。你可以猜测数字为 1 。- 如果这是我选中的数字,你的总费用为 $7 + $3 = $10 。否则,你需要支付 $1 。- 如果我的数字更大,那么这个数字一定是 2 。你猜测数字为 2 并赢得游戏,总费用为 $7 + $3 + $1 = $11 。
在最糟糕的情况下,你需要支付 $16 。因此,你只需要 $16 就可以确保自己赢得游戏。示例 2:输入:n = 1
输出:0
解释:只有一个可能的数字,所以你可以直接猜 1 并赢得游戏,无需支付任何费用。示例 3:输入:n = 2
输出:1
解释:有两个可能的数字 1 和 2 。
- 你可以先猜 1 。- 如果这是我选中的数字,你的总费用为 $0 。否则,你需要支付 $1 。- 如果我的数字更大,那么这个数字一定是 2 。你猜测数字为 2 并赢得游戏,总费用为 $1 。
最糟糕的情况下,你需要支付 $1 。

解题思路

  • 数组定义:dp[i][j]代表从区间[i,j]里面猜数字,能够 确保获胜 的最小现金数。
  • 初始化:当i==j时,只能猜一个数字,所以必定胜利,不需要花费任何现金,当i>j时,不存在实际意义
  • 状态转移:从区间[i,j]里面猜数字,遍历所有可能的选择,在选择完猜测的数字k以后,选择花费更大的区间进行下一轮的猜数字max(dp[i][k-1],dp[k+1][j]),因为我们必须确保能够获胜,所以考虑的都是最坏的情况

代码

class Solution {
public:int getMoneyAmount(int n) {vector<vector<int>> dp(n+1,vector<int>(n+1));for (int i = n-1; i >=1; i--) {for (int j = i+1; j <=n ; ++j) {int m=INT_MAX;for (int k = i; k <j ; ++k) {m=min(m,k+max(dp[i][k-1],dp[k+1][j]));}dp[i][j]=m;}}return dp[1][n];}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/389805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hdu_2048 错排问题

错排问题本质上就是一个动态规划问题&#xff0c;其状态转移方程为&#xff1a; 记d[n]为n个人错排情况的总数。 那么策略可以描述为&#xff1a;分析第n个人错排的可能情况&#xff1a; 1&#xff09;前n-1个人满足错排的情况&#xff0c;那么第n个人加入后还要错排意味着第n个…

海量数据寻找最频繁的数据_在数据中寻找什么

海量数据寻找最频繁的数据Some activities are instinctive. A baby doesn’t need to be taught how to suckle. Most people can use an escalator, operate an elevator, and open a door instinctively. The same isn’t true of playing a guitar, driving a car, or anal…

OSChina 周四乱弹 —— 要成立复仇者联盟了,来报名

2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单&#xff08;2018&#xff09;请戳&#xff08;这里&#xff09; 【今日歌曲】 Devoes &#xff1a;分享吴若希的单曲《越难越爱 (Love Is Not Easy / TVB剧集《使徒行者》片尾曲)》: 《越难越爱 (Love Is No…

2023. 连接后等于目标字符串的字符串对

2023. 连接后等于目标字符串的字符串对 给你一个 数字 字符串数组 nums 和一个 数字 字符串 target &#xff0c;请你返回 nums[i] nums[j] &#xff08;两个字符串连接&#xff09;结果等于 target 的下标 (i, j) &#xff08;需满足 i ! j&#xff09;的数目。 示例 1&…

webapi 找到了与请求匹配的多个操作(ajax报500,4的错误)

1、ajax报500,4的错误&#xff0c;然而多次验证自己的后台方法没错。然后跟踪到如下图的错误信息&#xff01; 2、因为两个函数都是无参的&#xff0c;返回值也一样。如下图 3&#xff0c;我给第一个函数加了一个参数后&#xff0c;就不报错了&#xff0c;所以我想&#xff0c;…

可视化 nlp_使用nlp可视化尤利西斯

可视化 nlpMy data science experience has, thus far, been focused on natural language processing (NLP), and the following post is neither the first nor last which will include the novel Ulysses, by James Joyce, as its primary target for NLP and literary elu…

区分'方法'和'函数'

区分方法: 1在类中的叫方法,在类外面的叫函数 2在名字前加 对象名. 的叫方法, 在名字前加 类名. 或 只写名字的 叫函数 通过代码进行区分: 1 from types import MethodType,FunctionType 2 def check(arg): 3 if isinstance(arg,MethodType)#判断第一个参数是否是第二个参数…

520. 检测大写字母

520. 检测大写字母 我们定义&#xff0c;在以下情况时&#xff0c;单词的大写用法是正确的&#xff1a; 全部字母都是大写&#xff0c;比如 “USA” 。单词中所有字母都不是大写&#xff0c;比如 “leetcode” 。如果单词不只含有一个字母&#xff0c;只有首字母大写&#xf…

Java 打包 FatJar 方法小结

在函数计算(Aliyun FC)中发布一个 Java 函数&#xff0c;往往需要将函数打包成一个 all-in-one 的 zip 包或者 jar 包。Java 中这种打包 all-in-one 的技术常称之为 Fatjar 技术。本文小结一下 Java 里打包 FatJar 的若干种方法。 什么是 FatJar FatJar 又称作 uber-Jar&#x…

常见问题及解决方案(前端篇)

一、jquery validate 默认校验规则序号 规则 描述1 requiredtrue 必须输入的字段。2 remote "check.php" 使用 ajax 方法调用 check.php 验证输入值。3 emailtrue 必须输入正确格式的电子邮件。4 urltrue 必须输入正确格式的网址。5 datetrue 必须输入正确格式的日期…

本地搜索文件太慢怎么办?用Everything搜索秒出结果(附安装包)

每次用电脑本地的搜索都慢的一批&#xff0c;后来发现了一个搜索利器 基本上搜索任何文件都不用等待。 并且页面非常简洁&#xff0c;也没有任何广告&#xff0c;用起来非常舒服。 软件官网如下&#xff1a; voidtools 官网提供三个版本&#xff0c;用起来差别不大。 网盘链…

2024. 考试的最大困扰度

2024. 考试的最大困扰度 一位老师正在出一场由 n 道判断题构成的考试&#xff0c;每道题的答案为 true &#xff08;用 ‘T’ 表示&#xff09;或者 false &#xff08;用 ‘F’ 表示&#xff09;。老师想增加学生对自己做出答案的不确定性&#xff0c;方法是 最大化 有 连续相…

小程序入口传参:关于带参数的小程序扫码进入的方法

1.使用场景 1.医院场景&#xff1a;比如每个医生一个id&#xff0c;通过带参数二维码&#xff0c;扫码二维码就直接进入小程序医生页面 2.餐厅场景&#xff1a;比如每个菜一个二维码&#xff0c;通过扫码这个菜的二维码&#xff0c;进入小程序后&#xff0c;可以直接点这道菜&a…

python的power bi转换基础

I’ve been having a great time playing around with Power BI, one of the most incredible things in the tool is the array of possibilities you have to transform your data.我在玩Power BI方面玩得很开心&#xff0c;该工具中最令人难以置信的事情之一就是您必须转换数…

感想3-对于业务逻辑复用、模板复用的一些思考(未完)

内容概览&#xff1a; 业务逻辑复用的目的基于现有场景&#xff0c;如何抽象出初步可复用逻辑复用业务逻辑会不会产生过度设计的问题业务逻辑复用的目的 我对于业务逻辑复用的理解是忽略实际业务内容&#xff0c;从交互流程、交互逻辑的角度去归纳、总结&#xff0c;提出通用的…

Git的一些总结

.git 目录结构 |── HEAD|── branches // 分支|── config // 配置|── description // 项目的描述|── hooks // 钩子| |── pre-commit.sample| |── pre-push.sample| └── ...|── info| └── exclude // 类似.gitignore 用于排除文件|── objects // 存储了…

2025. 分割数组的最多方案数

2025. 分割数组的最多方案数 给你一个下标从 0 开始且长度为 n 的整数数组 nums 。分割 数组 nums 的方案数定义为符合以下两个条件的 pivot 数目&#xff1a; 1 < pivot < nnums[0] nums[1] … nums[pivot - 1] nums[pivot] nums[pivot 1] … nums[n -1] 同时…

您是六个主要数据角色中的哪一个

When you were growing up, did you ever play the name game? The modern data organization has something similar, and it’s called the “Bad Data Blame Game.” Unlike the name game, however, the Bad Data Blame Game is played when data downtime strikes and no…

命令查看linux主机配置

查看cpu&#xff1a; # 总核数 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 物理CPU个数 X 每颗物理CPU的核数 X 超线程数# 查看物理CPU个数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l# 查看每个物理CPU中core的个数(即核数) cat /proc/cpui…

C#中全局处理异常方式

using System; using System.Configuration; using System.Text; using System.Windows.Forms; using ZB.QueueSys.Common;namespace ZB.QueueSys {static class Program{/// <summary>/// 应用程序的主入口点。/// </summary>[STAThread]static void Main(){Appli…