C语言 | Leetcode C语言题解之第375题猜数字大小II

题目:

题解:

cpp 复制代码
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <math.h>
#include <limits.h>

#define MMAX(a, b)        ((a) > (b)? (a) : (b))
#define MMIN(a, b)        ((a) < (b)? (a) : (b))

#define MAX_LEN     1000

int dp[MAX_LEN][MAX_LEN];

//【算法思路】分组DP。
int getMoneyAmount(int n){
    if(n == 1) {
        return 0;
    }

    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {
            dp[i][j] = 0;
        }
    }

    for(int gap = 0; gap < n; gap++) {
        for(int i = 0; i + gap < n; i++) {
            int j = i + gap;

            if(gap == 0) {
                dp[i][j] = 0;
                continue;
            }

            int min = MMIN(i + 1 + dp[i + 1][j], j + 1 + dp[i][j - 1]);

            for(int k = i + 1; k < j; k++) {
                min = MMIN(min, k + 1 + MMAX(dp[i][k - 1], dp[k + 1][j]));
            }

            dp[i][j] = min;
        }
    }
/*
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {
            printf("dp[%d, %d] = %d     ", i, j, dp[i][j]);
        }
        printf("\n");
    }
*/
    return dp[0][n - 1];
}
相关推荐
Liangwei Lin4 小时前
LeetCode 118. 杨辉三角
算法·leetcode·职场和发展
我星期八休息4 小时前
Linux系统编程—基础IO
linux·运维·服务器·c语言·c++·人工智能·算法
YL200404266 小时前
047从前序与中序遍历序列构造二叉树
算法·leetcode
kkeeper~7 小时前
0基础C语言积跬步之深入理解指针(4)
c语言·开发语言
学会870上岸华师7 小时前
C 语言程序设计——第一章课后编程题
c语言·开发语言·学习·算法
如竟没有火炬9 小时前
字符串相乘——int数组转字符串
开发语言·数据结构·python·算法·leetcode·深度优先
wangjialelele9 小时前
【SystemV】基于建造者模式的信号量
linux·c语言·c++·算法·建造者模式
朔北之忘 Clancy10 小时前
2026 年 3 月青少年软编等考 C 语言一级真题解析
c语言·开发语言·c++·学习·青少年编程·题解·一级
不剪发的Tony老师11 小时前
Code::Blocks:一款免费开源的C/C++/Fortran集成开发环境
c语言·c++·ide
YL2004042612 小时前
046二叉树展开为链表
数据结构·leetcode·链表