91 · 最小调整代价(序列dp)

链接:最小调整代价

题解:序列dp+状态

序列dp

fi中部的下标i表示前i个元素a0,a1,...,ai-1的某种性质

坐标型的fi表示以ai为结尾的某种性质

初始化中,f0表示空序列的性质

cpp 复制代码
class Solution {
public:
    int MinAdjustmentCost(vector<int> &A, int target) {
        int len = A.size();
        if (len <= 0) return 0;
        
        // dp[i][j]:前 i 个元素调整完,且第 i 个元素调整为 j 时的最小代价
        // 值域 1~100
        vector<vector<int>> dp(len + 1, vector<int>(101, INT_MAX));
        
        // 前 0 个元素,代价为 0
        for (int j = 1; j <= 100; ++j) {
            dp[0][j] = 0;
        }
        
        for (int i = 1; i <= len; ++i) {
            for (int j = 1; j <= 100; ++j) {
                // 前一个元素 k 必须满足 |k - j| <= target
                for (int k = max(1, j - target); k <= min(100, j + target); ++k) {
                    if (dp[i - 1][k] == INT_MAX) continue;
                    dp[i][j] = min(dp[i][j],
                                   dp[i - 1][k] + abs(A[i - 1] - j));
                }
            }
        }
        
        int result = INT_MAX;
        for (int j = 1; j <= 100; ++j) {
            result = min(result, dp[len][j]);
        }
        return result;
    }
};
相关推荐
moshuying44 分钟前
扩散模型开始写代码、开网页了:350 亿参数,速度比 Jev 快一倍
前端·算法
小超人诞生日记1 小时前
C++ 异常机制详解:从抛出捕获到异常安全
c++·算法
labuladong2 小时前
机器学习&神经网络 系列教程上线
神经网络·算法·机器学习
xiangyun612 小时前
C++ 手撕 shared_ptr:引用计数与控制块到底长什么样?
开发语言·c++·算法·面试·stl
学习论之费曼学习法2 小时前
无人值守AI内容矩阵实战(8):标题 A/B 实验的 6 个工程实现细节,隔日对比与自动判胜
人工智能·python·算法·矩阵·自动化·a/b测试·内容矩阵
Carl_奕然2 小时前
【机器视觉】最强算法之:3D高斯泼溅(3D Gaussian Splatting)
人工智能·python·算法·目标检测·计算机视觉·3d
w_zero_one2 小时前
算法--桶思想
java·开发语言·算法
wordbaby3 小时前
同一次请求里的两道锁:图解搞懂国密 SM2 与 SM3
算法
miller-tsunami4 小时前
内存管理&模板
c++·算法·内存管理·模板