leetcode 375. Guess Number Higher or Lower II 解题报告

原题链接

原题链接

解题思路

刚开始并不是很理解题意,然后去看了看讨论区的大神们。大概明白了。
对于每一个数字x在数组[i~j],我们算他的花费为 x + max{DP([i~x-1]), DP([x+1, j])}。
the max意思是无论你猜哪个数字,这个数字的反馈都是最差的,需要花费很多。
the min是指在这么多最差反馈里挑出最少的花费。
数组dp[i][j] 表示i~j的minmax花费。

解题代码
public class Solution {
    public int getMoneyAmount(int n) {
        int[][] dp = new int[n+1][n+1];
        return DP(dp,1,n);
    }
    public int DP(int[][] dp,int low,int high) {
        if(high <= low) {
            return 0;
        }
        if(dp[low][high] != 0) {
            return dp[low][high];
        }
        int res = Integer.MAX_VALUE;
        for (int i = low;i <= high;i++) {
            int tmp = i + Math.max(DP(dp,low,i-1),DP(dp,i+1,high));
            res = Math.min(tmp,res);
        }
        dp[low][high] = res;
        return res;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值