news 2026/4/18 8:29:31

分治优化dp

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
分治优化dp


C++ 分治优化 DP 模板

#include <vector>
#include <algorithm>
using namespace std;

const long long INF = 1e18;

// 1. 定义代价计算函数
// 示例:计算区间 [l, r) 的代价
long long cost(int l, int r, vector<long long>& presum) {
long long s = presum[r] - presum[l];
return s * (s + 1) / 2;
}

// 2. 分治优化核心函数
void solve(int l, int r, int optL, int optR, vector<vector<long long>>& dp, vector<long long>& presum, int k) {
if (l > r) return;
int mid = (l + r) / 2;
long long best = INF;
int bestOpt = optL;
// 在 [optL, min(optR, mid-1)] 范围内寻找最优分割点
for (int i = optL; i <= min(optR, mid - 1); ++i) {
long long current = dp[k-1][i] + cost(i, mid, presum);
if (current < best) {
best = current;
bestOpt = i;
}
}
dp[k][mid] = best;
// 递归处理左右区间
solve(l, mid - 1, optL, bestOpt, dp, presum, k);
solve(mid + 1, r, bestOpt, optR, dp, presum, k);
}

// 3. 主 DP 函数
vector<vector<long long>> divideAndConquerDP(int K, int n, vector<long long>& presum) {
vector<vector<long long>> dp(K+1, vector<long long>(n+1, INF));
// 初始化:划分1段时的代价
for (int i = 1; i <= n; ++i) {
dp[1][i] = cost(0, i, presum);
}
// 分治优化求解
for (int k = 2; k <= K; ++k) {
solve(1, n, 1, n, dp, presum, k);
}
return dp;
}

// 4. 问题入口函数
long long solveProblem(vector<int>& nums, int k) {
int n = nums.size();
vector<long long> presum(n + 1, 0);
for (int i = 0; i < n; ++i) {
presum[i+1] = presum[i] + nums[i];
}
auto dp = divideAndConquerDP(k, n, presum);
return dp[k][n];
}


模板核心

1. 可复用性:只需要替换 cost() 函数,就能适配不同的划分代价问题
2. 时间复杂度:O(k·n log n),比朴素 DP 的 O(k·n²) 效率高很多
3. 适用场景:当 DP 转移满足决策单调性时(即最优分割点随区间右移单调不减),就可以用这个模板

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/11 19:26:45

.NET Core Web 中的健康检查端点

.NET Core Web 中的健康检查端点 文章目录 .NET Core Web 中的健康检查端点概述核心概念1. 健康状况状态2. 主要组件 基本配置1. 添加健康检查服务2. 配置端点路由 创建自定义健康检查实现 IHealthCheck 接口 常用内置健康检查1. 数据库健康检查2. URL 健康检查3. 内存检查 高级…

作者头像 李华
网站建设 2026/4/17 20:54:11

moltbook爆火背后:人类操控?伪造截图?Karpathy发风险提醒

部分开发者认为 moltbook 是科幻照进现实的突破&#xff0c;可能催生 AI 集体智慧&#xff08;甚至自主意识&#xff09;的涌现&#xff0c;并为研究 AI 社会提供真实案例。这个周末&#xff0c;整个科技圈都被 moltbook 刷屏了。简单来说&#xff0c;这是一个专为 AI 设立的社…

作者头像 李华
网站建设 2026/4/17 18:20:52

横评后发现!继续教育论文神器 —— 千笔·专业学术智能体

你是否也曾为论文写作而焦虑&#xff1f;选题无从下手、框架杂乱无章、文献查找费时费力、查重率高得让人崩溃……这些困扰&#xff0c;是否让你在学术道路上举步维艰&#xff1f;面对毕业季的压力&#xff0c;你是否渴望一个高效、专业的写作助手&#xff1f;千笔AI&#xff0…

作者头像 李华
网站建设 2026/4/16 12:38:16

2026毕设ssm+vue农村贫困户管理系统论文+程序

本系统&#xff08;程序源码&#xff09;带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景关于精准扶贫信息管理问题的研究&#xff0c;现有研究主要以宏观政策分析和单一功能模块开发为主&#xff0c;专门针对整合贫困…

作者头像 李华