前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Guess Number Higher or Lower II

Guess Number Higher or Lower II

作者头像
用户1733462
发布2018-06-01 16:54:10
5140
发布2018-06-01 16:54:10
举报
文章被收录于专栏:数据处理数据处理
Guess Number Higher or Lower II

这个题目还是蛮有意思的 给定整数n,假定我选中的数1到n中的C,我只提示你猜的数与C的大小关系,这样你就可以缩小范围,继续猜测,但是你猜错数字,就要支付等值的美元,我为了获得更多的美元,会通过高低引导你,比如 n = 10 1,2,3,4,5,6,7,8,9,10 这时候如果你第一次选中9,我要是提示你猜小了,则你下一个就可以猜出10,因为只有一个数可以选择,那么我只能得到9美元,如果我告诉你猜高了,还有很多数字可选,这样我也可以获得更多美元。

假如你第一次选择的是7,如果告诉你猜低了,往高了猜你会猜几呢,一开始觉得猜7+10均值8,那么我可以告诉你还是猜低了,这时候你再猜8+10均值9,我还是可以告诉你猜低了,因为还有10,你要支付7+8+9,如果一个开始猜完7,直接猜测8+10均值9,这样无论我说猜低猜高了,你都可以获得答案是8或者10,只需支付7+9,16美元 这个题目可以用动态规划求解,不断就将问题分解成规模小子问题,终结条件就是问题不可分了。而且开始选择都是从中间往后开始猜,这样才能少支付美元,程序性能会提升很多

代码语言:javascript
复制
import numpy as np
class Solution(object):
    def getMoneyAmount(self, n):
        return self.dp(1, n)
        """
        :type n: int
        :rtype: int
        """
    dic = {}
    def dp(self, start, end):
        if (start, end) in self.dic:
            return self.dic[(start,end)]
        if start >= end:
            self.dic[(start,end)] = 0
            return 0
        elif (start == end - 1):
            self.dic[(start,end)] = start
            return start
        elif (start == end -2):
            self.dic[(start,end)] = start+1
            return start+1
        else:
            temp = np.maximum
            for i in range((start+end)/2, end+1,1):
                temp = min(temp, i + max(self.dp(start, i-1), self.dp(i+1, end)))
        self.dic[(start,end)] = temp
        return temp     
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.01.05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Guess Number Higher or Lower II
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档