当前位置: 首页 > news >正文

搭建企业网站软文营销

搭建企业网站,软文营销,用Html5做网站,陕西十二建设有限公司网站前言: 在上一篇中,我们讲解了动态规划基础及线性、区间 DP 典型案例。本篇将聚焦 背包问题、树形 DP、状态压缩 DP 以及更高级的 DP 技巧,如插值 DP、数位 DP 和树链剖分DP。通过这些内容,你将全面提升动态规划问题的建模与求解能…

前言:

        在上一篇中,我们讲解了动态规划基础及线性、区间 DP 典型案例。本篇将聚焦 背包问题树形 DP状态压缩 DP 以及更高级的 DP 技巧,如插值 DP、数位 DP 和树链剖分+DP。通过这些内容,你将全面提升动态规划问题的建模与求解能力。


一、背包问题

        背包问题是动态规划最经典的应用场景之一,包含若干变种:

1. 0/1 背包

1.1 问题定义

        给定 N 件物品,每件物品体积 vol[i]、价值 val[i],以及一个容量为 V 的背包。每件物品只能选择 0 次或 1 次,求最大总价值。

1.2 状态定义与转移
  • 定义 dp[i][j] 为前 i 件物品、背包容量为 j 时的最大价值。

  • 转移:

    dp[i][j] = max(dp[i-1][j], dp[i-1][j-vol[i]] + val[i])
    
  • 边界:dp[0][*] = 0, dp[*][0] = 0

1.3 自底向上实现(二维)
int[][] dp = new int[N+1][V+1];
for (int i = 1; i <= N; i++) {for (int j = 0; j <= V; j++) {dp[i][j] = dp[i-1][j];if (j >= vol[i])dp[i][j] = Math.max(dp[i][j], dp[i-1][j-vol[i]] + val[i]);}
}
return dp[N][V];
1.4 一维滚动数组优化
  • 注意倒序遍历容量,防止重复使用同一物品:

int[] dp = new int[V+1];
for (int i = 1; i <= N; i++) {for (int j = V; j >= vol[i]; j--) {dp[j] = Math.max(dp[j], dp[j-vol[i]] + val[i]);}
}
return dp[V];

2. 完全背包

2.1 定义

        每种物品可以无限次选取。

2.2 转移
  • 正序遍历容量:

for (int i = 1; i <= N; i++)for (int j = vol[i]; j <= V; j++)dp[j] = Math.max(dp[j], dp[j-vol[i]] + val[i]);

3. 多重背包

3.1 定义

每种物品有 cnt[i] 件可选。

3.2 转换策略
  • 直接枚举:O(NVcnt)

  • 二进制拆分优化:将 cnt[i] 分解为若干二进制块,转化为多个 0/1 物品,复杂度 O(NVlog cnt)

int k = 1;
while (k < cnt[i]) {addItem(vol[i]*k, val[i]*k);cnt[i] -= k;k <<= 1;
}
addItem(vol[i]*cnt[i], val[i]*cnt[i]);

4. 背包问题的变种

  • 分组背包:物品分组,每组只能选 0/1 件。

  • 混合背包:部分物品 0/1,部分完全,多重共存。

通用做法:对不同类型物品分别使用不同遍历顺序。


二、树形 DP 与状态压缩

1. 树形 DP

1.1 问题场景
  • 路径最大和:树中两节点路径权重最大。

  • 树的直径:树上最长路径。

  • 最小覆盖集(Vertex Cover):选顶点使每条边至少有一个端点被选中。

1.2 树形 DP 通用思路
  • 以根为起点,对树进行 DFS,将子树结果向上传递。

  • 状态 dp[u][0/1] 表示节点 u 未选/已选的最优解。

void dfs(int u, int parent) {dp[u][0] = 0;dp[u][1] = value[u];for (int v : children[u]) if (v != parent) {dfs(v, u);dp[u][0] += dp[v][1];  // u 不选,v 必选dp[u][1] += Math.min(dp[v][0], dp[v][1]);}
}

2. 状态压缩 DP

适用于 n ≤ 20 的子集枚举场景,如旅行商、集合划分。

2.1 旅行商 (TSP)
  • dp[mask][i] 表示经过子集 mask,终点为 i 的最短路径。

  • 转移:

for mask, i: dp[mask][i] = min(dp[mask ^ (1<<i)][j] + dist[j][i])

时间 O(n^22^n),空间 O(n2^n)。

2.2 集合划分 / 多人配送

同理使用 mask 表示已覆盖元素/客户。


三、高级 DP 话题

1. 插值 DP

  • 场景:插花、矩形切割。动态枚举插入或切割点。

  • 转移类似区间 DP。

2. 数位 DP

  • 场景:统计满足条件的整数个数。

  • 思路:按高位逐步枚举,对前缀状态进行 DP。

3. 树链剖分 + DP

  • 思路:将树分解为链段,对路径或区间 DP 使用线段树/前缀和优化。


四、本篇小结

  • 背包系列:0/1、完全、多重及其优化方法;分组、混合背包可灵活组合。

  • 树形 DP:将树问题映射为子树状态转移,处理路径或覆盖类型问题。

  • 状态压缩 DP:子集枚举是 NP-hard 问题的近似或小规模精确解法。

  • 高级技巧:插值 DP、数位 DP 和树链剖分+DP 扩展了 DP 的应用边界。

        动态规划是算法竞赛和工程优化的利器,多练习、多归纳,才能驾驭其强大威力。

http://www.mmbaike.com/news/23519.html

相关文章:

  • 西宁做网站需要多少钱自助建站模板
  • 广西省住房和城乡建设厅官方网站搜索引擎优化seo课程总结
  • 上海服装贸易公司排名seo服务商
  • 在网站中写小说想要删除如何做武汉seo公司
  • 廊坊网站建设精灵深圳网站建设哪家好
  • wordpress采集后seo百度seo查询系统
  • 上海市质量工程建设管理协会网站seo薪酬水平
  • 网站咨询聊天怎么做权重查询爱站网
  • visio画网站开发类图百度竞价排名是什么意思
  • 网站内容页怎么做的天津百度优化
  • 建设我们的网站教案深圳seo云哥
  • 网站建设unohacha线上营销推广方式
  • 北京专业网站开发公司鹤壁搜索引擎优化
  • thinkphp cms开源系统seo综合查询怎么用的
  • 网站中常用的英文字体seo优化网站词
  • 网站被k什么意思百度搜索大数据
  • 有什么网站可以做微信支付宝支付宝域名查询访问
  • vb.net可以做网站吗网站排名优化培训课程
  • 自己做头像网站免费发布推广的平台
  • 网站受到攻击 怎么做攻击的典型十大优秀网络营销案例
  • 淮南房地产网站建设网站百度seo刷排名软件
  • 设计师服务平台素材下载seo网站关键词优化
  • 做网站需要的硬件产品线下推广方式都有哪些
  • 可以注册的网站销售课程视频免费
  • 常见行业门户网站新媒体推广渠道有哪些
  • 日本网络ip地址大全seo案例模板
  • linux 如何做网站外贸网站优化
  • 如何做直播类网站武汉seo霸屏
  • 综合网站模板网站 推广
  • 南宁软件优化网站建设精准客户运营推广