![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM-动态规划-斜率DP
暗金色
这个作者很懒,什么都没留下…
展开
-
POJ - 3709 K-Anonymous Sequence(斜率优化)
题目大意:给出N个递增数字,要求你将这些数字进行分组,每组至少要K个,且每一组的数字都要相同,数字只能减少,不能增加,变化的代价就是(该数-要变化的数字) 问最少的变化代价和解题思路:设dp[i]为前i个数字分好组后的最小变化代价和 得到转移方程dp[i] = dp[j] + sum[i] - sum[j] - (i - j) * val[j + 1] sum[i]表示前i个数字和,val[i原创 2015-10-07 14:24:56 · 464 阅读 · 0 评论 -
HDU - 3516 Tree Construction(四边形优化)
题目大意:给你一系列的坐标,x递增,y递减,问如何连成一棵树,能使数边和达到最小解题思路:用dp[i][j]表示从第i到第j个连接起来的最小和 则dp[i][j] = dp[i][k] + dp[k + 1][j] + abs(x[k + 1] - x[i] + y[k] - y[j])#include <cstdio>#include <cstring>#define abs(x)((x)>原创 2015-10-13 22:48:52 · 469 阅读 · 0 评论 -
HDU - 3506 Monkey Party(四边形优化)
题目大意:给你N堆石子,围成一个环,两堆石子合并的代价是两堆石子的和,问最后合并成一堆所需要的最小代价解题思路:用dp[i][j]表示将区间[i,j]内的石子合并成一堆的最小代价 则dp[i][j] = dp[i][k] + dp[k + 1][j] + w[i][j] w[i][j]表示区间[i,j]的和#include <cstdio>#include <cstring>#include原创 2015-10-13 23:14:45 · 478 阅读 · 0 评论 -
HDU - 3480 Division(四边形优化)
题目大意:给出N个数,要求你分成M个集合,使得每个集合的(最大值 - 最小值)^2的和达到最小解题思路:先排个序 用dp[i][j]表示前几个数字分成i个集合的最小和 则dp[i][j] = dp[i - 1][k] + w[k + 1][j] w[k + 1][j]表示[k + 1, j]这个集合的(最大值-最小值) ^ 2#include <cstdio>#include <cstrin原创 2015-10-13 22:57:27 · 461 阅读 · 0 评论 -
HDU - 2829 Lawrence(四边形优化)
题目大意:给你N个数,要求你分成M个部分,每部分的得分为,假设该部分为i, j, k, 那么的分就为i * j + i * k + j * k 问划分后,至少能得多少分解题思路:用dp[i][j]表死前j个数,分成了i个部分,所能得到的最小得分,则dp[i][j] = dp[i - 1][k] + w[k + 1][j] w[k + 1][j]表示k+1个数到第j个数为一部分的得分 该式子满足原创 2015-10-13 22:44:07 · 420 阅读 · 0 评论 -
POJ - 1160 Post Office(四边形优化)
题目大意:给出N个地点,要求你在N个地点上面挑选M个点建邮局,使得每个点到最近的邮局的距离和达到最小解题思路:设dp[i][j]表示前j个点,建立i个邮局的最小距离和 则dp[i][j] = dp[i - 1][k] + w[k + 1][j] w[k + 1][j]表示的是在[k + 1, j]这些地方建立邮局的最小距离和#include <cstdio>#include <cstring>原创 2015-10-13 22:52:08 · 379 阅读 · 0 评论 -
HDU - 3507 Print Article(斜率DP)
题目大意:就是那个公式了解题思路: 以下参考了传送门 设dp[i]为前i个的和 则dp[i] = min(dp[j] + (sum[i] - sum[j]) ^ 2) 设j < k,则k点比j点更优,则 dp[j] + (sum[i] - sum[j]) ^ >= dp[k] + (sum[i] - sum[k]) ^ 2 化简得 dp[j] + sum[i] ^ 2 + sum[j]原创 2015-10-07 10:14:18 · 430 阅读 · 0 评论 -
UVA - 12594 Naming Babies(斜率优化)
题目大意:给出一个字符串,要求你将这个字符串分成k段 每段的代价为sigma(i - pos) * pos 求所有段的最小代价和解题思路:用dp[i][j]表示前i个字符分成j段的最小代价和 得到转移方程dp[i][j] = dp[k][j - 1] + (0 * pos[k + 1] + 1 * pos[k + 2] + … + (i - k - 1) * pos[i]) - (pos[k原创 2015-10-07 14:53:17 · 491 阅读 · 0 评论 -
HDU - 3045 Picnic Cows(斜率优化)
题目大意:给你N个整数,现在要求你将这些整数分块,使得每块的数的数量大于等于k,每块的价值为,这个块里面的所有数 - 这个块里面的最小的数 每块的价值总和的最小值解题思路:先排个序,从小到大排,这样能使价值达到最小 设dp[i]为前i个数的划分完后的总价值 得到转移方程dp[i] = dp[j] + sum[i] - sum[j] - (i - j) * val[j + 1] sum[i]原创 2015-10-07 12:56:58 · 382 阅读 · 0 评论 -
UVALive - 5097 Cross the Wall(斜率优化)
题目大意:有N个长方形,要穿过一张纸,最多可以在这张纸上剪掉K个长方形,剪掉一个长方形的代价为该长方形的长*宽 现在问所有长方形都通过的最小代价解题思路:首先,排除掉那个无用的长方形,无用的长方形指的是h[i] < h[j]且w[i] < [j](h指长,w指宽), 接着排序,排序按照长递减,宽递增 现在设dp[i][j]为前i个长方形,在剪掉j个长方形的情况下全部通过的最小代价 则dp[i原创 2015-10-07 11:19:13 · 745 阅读 · 0 评论 -
HDU - 1300 Pearls(斜率DP)
题目大意:有n种珠宝,每件珠宝有必须要买的数量ai和单价pi,c种珠宝的单价递增。如果买了某种珠宝,需要额外付一次10*pi的费用,同时允许用等量的高价珠宝代替等量的的低价珠宝,问至少要花多少钱,才能达到要求解题思路:设 dp[i]为买前i种珠宝需要花费的最小代价 得转移方程dp[i] = dp[j] + (sum[i] - sum[j] + 10) * val[i] 假设k > j,且k点比j原创 2015-10-07 10:49:33 · 587 阅读 · 0 评论 -
HDU - 2829 Lawrence(斜率优化)
题目大意:给你N个数,要求你分成M个部分,每部分的得分为,假设该部分为i, j, k, 那么的分就为i * j + i * k + j * k 问划分后,至少能得多少分解题思路:设dp[i][j]为前面i个数,分成j个部分能得到得最小得分 得转移方程dp[i][j] = dp[k][j - 1] + cost[i] - cost[k] - (sum[i] - sum[k]) * sum[k]原创 2015-10-07 10:35:19 · 484 阅读 · 0 评论 -
POJ - 1180 Batch Scheduling(斜率优化DP)
题目大意:有N个任务,要求依次执行,每个任务有相应的执行时间和影响因素 你可以将多个任务划分到一个模块,也可以将一个任务划分到一个模块,模块完成的时间就是(该模块的所有任务的时间和 + T),模块完成时间就是模块内所有任务的完成时间 每个任务完成的代价是任务完成时间*该任务影响因素 问所有任务都完成后,sum(任务完成时间*该任务影响因素)的最小值解题思路:这题要倒着DP,任务顺序对调,第一个原创 2015-10-07 14:10:00 · 478 阅读 · 0 评论 -
HDU - 3480 Division(斜率优化)
题目大意:给出N个数,要求你将N个数分成K个集合,使每个集合的(最大值 - 最小值)^ 2和达到最小解题思路:先排个序,从小打大排 设dp[i][j]为前i个数分成j个集合最小平方和 得到转移方程dp[i][j] = dp[k][j - 1] + (val[i] - val[k + 1]) ^ 2 val[i]为第i个数的值 设l > k,且点l比点k优 则dp[k][j - 1] + (原创 2015-10-07 15:24:59 · 628 阅读 · 0 评论 -
POJ - 2018 Best Cow Fences(DP)
题目大意:给出N头牛的权值,现在需要将至少M头牛用围栏围起来,问如何选择,才能使(围起来的牛的权值和 / 牛的数量)达到最大解题思路:用dp[i]表示第i头牛加入队伍中所能得到的最大权值 一个队伍至少要有M头牛,假设刚好M头的话 那么dp[i] = (sum[i] - sum[i - M]) 如果超过M头,就表明他要和前面的那头为伍了 dp[i] = dp[i - 1] + val[i]了原创 2015-10-13 23:06:18 · 522 阅读 · 1 评论