375. 猜数字大小 II(区间dp)
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了375. 猜数字大小 II(区间dp)相关的知识,希望对你有一定的参考价值。
375. 猜数字大小 II (区间dp)
令 d p [ i ] [ j ] dp[i][j] dp[i][j]在范围 [ i , j ] [i,j] [i,j]获胜的最小现金数。
转移方程: d p [ i ] [ j ] = x + m a x ( d p [ i ] [ x − 1 ] , d p [ x + 1 ] [ j ] ) dp[i][j]=x+max(dp[i][x-1],dp[x+1][j]) dp[i][j]=x+max(dp[i][x−1],dp[x+1][j])
因为求最小: d p [ i ] [ j ] = m i n ( x + m a x ( d p [ i ] [ x − 1 ] , d p [ x + 1 ] [ j ] ) ) , x ∈ [ i , j ) dp[i][j]=min(x+max(dp[i][x-1],dp[x+1][j])),x\\in[i,j) dp[i][j]=min(x+max(dp[i][x−1],dp[x+1][j])),x∈[i,j)
时间复杂度: O ( n 3 ) O(n^3) O(n3)
class Solution {
public:
int getMoneyAmount(int n) {
vector<vector<int>> f(n+1,vector<int>(n+1));
for (int i = n - 1; i >= 1; i--) {
for (int j = i + 1; j <= n; j++) {
int minCost = INT_MAX;
for (int k = i; k < j; k++) {
int cost = k + max(f[i][k - 1], f[k + 1][j]);
minCost = min(minCost, cost);
}
f[i][j] = minCost;
}
}
return f[1][n];
}
};
以上是关于375. 猜数字大小 II(区间dp)的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 375 猜数字大小II[动态规划] HERODING的LeetCode之路
375 Guess Number Higher or Lower II 猜数字大小 II
(递归记忆化)最好与最坏的选择——375. 猜数字大小 II