平行四边形不等式优化DP

本文详细介绍了平行四边形不等式在动态规划中的应用,通过猴子派对和树的建造两个问题,阐述了如何利用平行四边形不等式优化状态转移方程,减少了计算复杂度,提高了算法效率。文章还提供了具体的代码实现和思路分析。
摘要由CSDN通过智能技术生成

目录

一.前言

二.平行四边形不等式是个啥?

1.题目引入:猴子派对

输入

输出

样例输入

样例输出

2.找出状态转移方程式

3.探索此状态转移方程式的性质

4.细节处理

1.环

2.循环顺序问题

5.更清晰的思维

6.代码

7.变式

1.题目:树的建造

输入

输出

样例输入

样例输出

2.思路

3.样例代码 

三.总结


一.前言

DP一直是编程中的一个难题,解决它不仅需要大量刷题,还需要学会各种DP的方法。这里,我就主要讲一个DP的优化方法:平行四边形不等式优化DP动态规划。(好难呀)

 


 

二.平行四边形不等式是个啥?

1.题目引入:猴子派对

远离我们的世界,有一个香蕉森林。许多可爱的猴子住在那里。有一天,作为香蕉林之王的SDH(宋大侯)决定举办一个盛大的聚会庆祝疯狂香蕉日。但小猴子彼此不认识,所以作为国王,SDH必须做点什么。 
现在有n只猴子坐成一圈,每只猴子都有交朋友的时间。而且,每只猴子都有两个邻居。SDH希望将它们介绍给对方,规则是:1。每次 ,他只能介绍一只猴子和一只猴子的邻居。 
2.如果他介绍A和B,那么每只已经知道的每只猴子A都知道每只猴子B已经知道了,这次引入的总时间是所有猴子A和B已经知道的交友时间的总和; 
3.每个小猴子都认识自己; 
为了开始聚会并尽快吃香蕉,SDH想知道他需要的最短时间。 

输入

有几个测试用例。在每种情况下,第一行是n(1≤n≤1000),这是猴子的数量。下一行包含n个正整数(小于1000),表示交朋友时间(按顺序,第一个和最后一个是邻居)。输入是文件结尾。

输出

对于每种情况,您应该打印一行,给出SDH引入时的最小时间。

样例输入

8

5 2 4 7 6 1 3 9

样例输出

105


2.找出状态转移方程式

大家先不管围成一个圈,先把它们看作一条直线。这道题的状态转移方程式很容易想到:就是在i~j号猴子的范围内,任取一个猴子k,当成是把这个猴子左边的那一堆猴子(i~k)介绍给它右边的那一堆猴子(k+1~j),先预处理计算出i~j号猴子交朋友的总时间w[i][j],于是,状态转移方程式就出来了:dp[i][j] = min(dp[i][k] + dp[k + 1][j])+w[i][j ]


3.探索此状态转移方程式的性质

这可能有点难得想,大家一定要注意!

以现在的状态转移方程式来看是个三重循环,肯定要超时,不妨让我们来优化一下这个k。k的值肯定无法在每次直接确定,那么我们就缩小它的范围。

首先,我们来探索一下w[i][j]的性质:有i<{i}'<j<{j}',那么w[{i}'][j] <= w[i][{j}']是毋庸置疑的。还有一个性质:

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值