LC-375 猜数字大小Ⅱ

问题:

给出数字n,在1~n中,假设设定了一个数字x让你猜,你猜一个y,如果错误,那就收取¥y的费用,并告诉你x与y的大小关系。求出在1~n中,在最佳策略下猜出一个x至少要花费多少。(考虑所有情况)

思路:

这里用到了DP问题的解决思想。通过遍历猜所有数字的情况,例如n为5,猜3,那么就将问题分成,猜1~2和4~5这两个情况的最优花费(这两个子问题)再加上3的消耗。再对比一个本次最优值,记录下这麽猜的最优值,以便复用。

代码:

 1 class Solution {
 2 public:
 3     int getMoneyAmount(int n) {
 4         int** status = new int*[n + 1];
 5         for (int i = 0; i <= n; i++) {
 6             status[i] = new int[n + 1];
 7         }
 8         return dp(status, 1, n);
 9     }
10
11     int dp(int** status, int start, int end) {
12         if (start >= end) return 0;
13         if (status[start][end] != 0) return status[start][end];
14         int local_min = INT_MAX;
15         for (int i = start; i <= end; i++) {
16             int tmp = i + max(dp(status, start, i - 1), dp(status, i + 1, end));
17             local_min = min(local_min, tmp);
18         }
19         status[start][end] = local_min;
20         return local_min;
21     }
22 };

原文地址:https://www.cnblogs.com/leo-lzj/p/10331533.html

时间: 2024-11-05 18:51:26

LC-375 猜数字大小Ⅱ的相关文章

猜数字大小游戏,用户输入一个数字,如果大了就显示大了,如果小了就显示小了, 如果对了就提示正确(补充难度,只有5次机会,限制数字的范围在百位以内)

产生0-100之间的随机数,包括0和100 double d = Math.random() * 100; int a = (int)Math.round(d); ------------------------------------- package 水仙花数; import java.util.Scanner;/* 猜数字大小游戏,用户输入一个数字,如果大了就显示大了,如果小了就显示小了,如果对了就提示正确(补充难度,只有5次机会,限制数字的范围在百位以内)*/public class t

[Swift]LeetCode374. 猜数字大小 | Guess Number Higher or Lower

We are playing the Guess Game. The game is as follows: I pick a number from 1 to n. You have to guess which number I picked. Every time you guess wrong, I'll tell you whether the number is higher or lower. You call a pre-defined API guess(int num) wh

leetcode 374. 猜数字大小(python)

我们正在玩一个猜数字游戏. 游戏规则如下:我从 1 到 n 选择一个数字. 你需要猜我选择了哪个数字.每次你猜错了,我会告诉你这个数字是大了还是小了.你调用一个预先定义好的接口 guess(int num),它会返回 3 个可能的结果(-1,1 或 0): -1 : 我的数字比较小 1 : 我的数字比较大 0 : 恭喜!你猜对了!示例 : 输入: n = 10, pick = 6输出: 6 class Solution(object): def guessNumber(self, n): "&q

Leetcode之二分法专题-374. 猜数字大小(374. Guess Number Higher or Lower)

我们正在玩一个猜数字游戏. 游戏规则如下:我从 1 到 n 选择一个数字. 你需要猜我选择了哪个数字.每次你猜错了,我会告诉你这个数字是大了还是小了.你调用一个预先定义好的接口 guess(int num),它会返回 3 个可能的结果(-1,1 或 0): -1 : 我的数字比较小 1 : 我的数字比较大 0 : 恭喜!你猜对了! 示例 : 输入: n = 10, pick = 6 输出: 6 相似题目:Leetcode之二分法专题-278. 第一个错误的版本(First Bad Version

375 Guess Number Higher or Lower II 猜数字大小 II

我们正在玩一个猜数游戏,游戏规则如下:我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字.每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了.然而,当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金.直到你猜到我选的数字,你才算赢得了这个游戏.示例:n = 10, 我选择了8.第一轮: 你猜我选择的数字是5,我会告诉你,我的数字更大一些,然后你需要支付5块.第二轮: 你猜是7,我告诉你,我的数字更大一些,你支付7块.第三轮: 你猜是9,我告诉你,我的数字更小一些,你支付

angularjs 实现猜数字大小的功能

1 <body ng-app="myapp" ng-controller="myCtrl"> 2 <h2>猜一猜,多大值?(1-1000)</h2> 3 我猜是:<input type="text" ng-model="guess"> 4 <button ng-click="check()">验证</button><button

Android猜数字大小游戏

功能介绍:该程序能够提示猜大了猜小了,并且对空白输入处理,还对猜测次数限制,提供重置功能. 1.先看界面,一个输入框EditText,两个Button 2.界面设计  activity_main2.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" x

[LeetCode] Guess Number Higher or Lower II 猜数字大小之二

We are playing the Guess Game. The game is as follows: I pick a number from 1 to n. You have to guess which number I picked. Every time you guess wrong, I'll tell you whether the number I picked is higher or lower. However, when you guess a particula

java三个取最大值、菜单新增修改、猜数字大小

原文地址:https://www.cnblogs.com/a709898670/p/9318492.html