POJ1160 Post Office-四边形不等式优化DP
方程
$\Large f(i,j)=min(f(i-1,k)+w(k+1,j))$
其中$w(i,j)$表示在$[i,j]$的村庄都去一个邮局的最小距离和
证明w满足四边形不等式
设$w_k(i,j)$表示$[i,j]$的村庄都去$k$村庄邮局的距离和
对于$\forall k$满足$w_k(i,j+1)=w(i,j+1)$都有$w_k(i+1,j)=w(i+1,j)$
(因为k只有选$i,j$的中间位置$w(i,j)$才是最小的)
$w(i,j)+w(i+1,j+1)\le w_k(i,j)+w_k(i+1,j+1)=w(i,j+1)+w(i+1,j)$
证明f满足四边形不等式
设$f_k(i,j)=f(i-1,k-1)+w(k,j)$
对于$\forall i\le i^{'}\le j\le j^{'}$,设$k=s(i,j^{'}),t=s(i^{'},j)$
1.如果$k\le t$
有$f(i,j)+f(i^{'},j^{'})\le f_k(i,j)+f_t(i^{'},j^{'})= f(i-1,k-1)+w(k,j)+f(i^{'}-1,t-1)+w(t,j^{'})$
因为w满足四边形不等式$f(i,j)+f(i^{'},j^{'})\le f(i-1,k-1)+w(k,j^{'})+f(i^{'}-1,t-1)+w(t,j)$
即$f(i,j)+f(i^{'},j^{'})\le f(i,j^{'})+f(i^{'},j)$
2.如果$k\gt t$
则只需证$f(i-1,t-1)+w(t,j)+f(i^{'}-1,k-1)+w(k,j^{'})\le f(i-1,k-1)+w(k,j^{'})+f(i^{'}-1,t-1)+w(t,j)$
设$k_1=s(i-1,k-1),k_2=s(i-2,k_1-1)……k_n=s(i-n,k_{n-1}-1)$
$t_1=s(i^{'}-1,t-1),t_2=s(i^{'}-2,t_1-1)……t_n=s(i^{'}-n,t_{n-1}-1)$
如果$k_1\le t_1$,就可以用上面的证明方法证出来
否则,递归本次证明直到得到求证$f(1,t_n-1)+f(i_{'}-i+1,k_n-1)\le f(1,k_n-1)+f(i_{'}-i+1,t_n-1)$
化简得$w(1,t_n-1)+f(i_{'}-i,t_{n+1}-1)+w(t_{n+1},k_n-1)\le w(1,k_n-1)+f(i_{'}-i,t_{n+1}-1)+w(t_{n+1},t_n-1)$
由w满足四边形不等式得$w(1,t_n-1)+w(t_{n+1},k_n-1)\le w(1,k_n-1)+w(t_{n+1},t_n-1)$
所以$f(i,j)+f(i^{'},j^{'})\le f(i,j^{'})+f(i^{'},j)$
证明$f(i,j)$的决策$s(i,j)$是单调的
1.设$k=s(i,j)$,对于所有$t\le k$
有$w(t,j)+w(k,j+1)\le w(t,j+1)+w(k,j)$
两边同时加上$f(i,t-1)+f(i,k-1)$得$f_t(i,j)+f_k(i,j+1)\le f_k(i,j)+f_t(i,j+1)$
因为$f_t(i,j)\ge f_k(i,j)$,所以$f_k(i,j+1)\le f_t(i,j+1)$
所以$s(i,j)\le s(i,j+1)$
2.设$k=s(i,j)$,对于所有$t\le k$
有$f(i,t-1)+f(i+1,k-1)\le f(i+1,t-1)+f(i,k-1)$
两边同时加上$w(t,j)+w(k,j)$得$f_t(i,j)+f_k(i+1,j)\le f_k(i,j)+f_t(i+1,j)$
因为$f_t(i,j)\ge f_k(i,j)$,所以$f_k(i+1,j\le f_t(i+1,j)$
所以$s(i,j)\le s(i+1,j)$
代码
#include<cstdio>
#include<cstring>
using namespace std;
#define maxn 305
#define maxp 40
int f[maxp][maxn],s[maxp][maxn],w[maxn][maxn],a[maxn];
int main(){
memset(f,0x3f,sizeof(f));
int n,p;scanf("%d%d",&n,&p);
for(int i=;i<=n;i++)scanf("%d",a+i);
for(int i=;i<=n;i++){
for(int j=i+;j<=n;j++){
w[i][j]=w[i][j-]+a[j]-a[(i+j)/];
}
s[][i]=;
}
f[][]=;
for(int i=;i<=p;i++){
f[i][i]=;s[i][i]=i;s[i][n+]=n;
for(int j=n;j>i;j--){
for(int k=s[i-][j];k<=s[i][j+];k++){
if(f[i][j]>f[i-][k-]+w[k][j]){
f[i][j]=f[i-][k-]+w[k][j];s[i][j]=k;
}
}
}
}
printf("%d",f[p][n]);
return ;
}
POJ1160 Post Office-四边形不等式优化DP的更多相关文章
- POJ 1160 Post Office (四边形不等式优化DP)
题意: 给出m个村庄及其距离,给出n个邮局,要求怎么建n个邮局使代价最小. 析:一般的状态方程很容易写出,dp[i][j] = min{dp[i-1][k] + w[k+1][j]},表示前 j 个村 ...
- 【转】斜率优化DP和四边形不等式优化DP整理
(自己的理解:首先考虑单调队列,不行时考虑斜率,再不行就考虑不等式什么的东西) 当dp的状态转移方程dp[i]的状态i需要从前面(0~i-1)个状态找出最优子决策做转移时 我们常常需要双重循环 (一重 ...
- hdu 2829 Lawrence(四边形不等式优化dp)
T. E. Lawrence was a controversial figure during World War I. He was a British officer who served in ...
- BZOJ1563/洛谷P1912 诗人小G 【四边形不等式优化dp】
题目链接 洛谷P1912[原题,需输出方案] BZOJ1563[无SPJ,只需输出结果] 题解 四边形不等式 什么是四边形不等式? 一个定义域在整数上的函数\(val(i,j)\),满足对\(\for ...
- codevs3002石子归并3(四边形不等式优化dp)
3002 石子归并 3 参考 http://it.dgzx.net/drkt/oszt/zltk/yxlw/dongtai3.htm 时间限制: 1 s 空间限制: 256000 KB 题目等级 ...
- CF321E Ciel and Gondolas Wqs二分 四边形不等式优化dp 决策单调性
LINK:CF321E Ciel and Gondolas 很少遇到这么有意思的题目了.虽然很套路.. 容易想到dp \(f_{i,j}\)表示前i段分了j段的最小值 转移需要维护一个\(cost(i ...
- POJ 1160 四边形不等式优化DP Post Office
d(i, j)表示用i个邮局覆盖前j个村庄所需的最小花费 则有状态转移方程:d(i, j) = min{ d(i-1, k) + w(k+1, j) } 其中w(i, j)的值是可以预处理出来的. 下 ...
- HDU 2829 Lawrence (斜率优化DP或四边形不等式优化DP)
题意:给定 n 个数,要你将其分成m + 1组,要求每组数必须是连续的而且要求得到的价值最小.一组数的价值定义为该组内任意两个数乘积之和,如果某组中仅有一个数,那么该组数的价值为0. 析:DP状态方程 ...
- 四边形不等式优化DP——石子合并问题 学习笔记
好方啊马上就要区域赛了连DP都不会QAQ 毛子青<动态规划算法的优化技巧>论文里面提到了一类问题:石子合并. n堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的 ...
- 石子合并(四边形不等式优化dp) POJ1160
该来的总是要来的———————— 经典问题,石子合并. 对于 f[i][j]= min{f[i][k]+f[k+1][j]+w[i][j]} From 黑书 凸四边形不等式:w[a][c]+w[b][ ...
随机推荐
- NX二次开发-UFUN单对象选择对话框UF_UI_select_with_single_dialog
#include <uf.h> #include <uf_ui.h> ], void* user_data, UF_UI_selection_p_t select) { if ...
- NX二次开发-获得制图中对象的坐标点UF_DRF_ask_origin
#include <uf.h> #include <uf_ui.h> #include <uf_drf.h> #include <uf_obj.h> # ...
- (转) MySQL中索引的限制
转:http://book.51cto.com/art/200906/132459.htm 8.4.8 MySQL中索引的限制 在使用索引的同时,还应该了解MySQL 中索引存在的限制,以便在索引应 ...
- hdu多校第九场 1005 (hdu6684) Rikka with Game 博弈
题意: 给一个小写字母组成的字符串,每回合轮到某人时,此人可以选择让某位+1(如果是z则变回a),或者直接结束游戏. 先手希望游戏结束时字符串字典序尽量小,后手希望游戏结束时字符串字典序尽量大,求游戏 ...
- CSS3:CSS3 简介
ylbtech-CSS3:CSS3 简介 1.返回顶部 1. CSS3 简介 对CSS3已完全向后兼容,所以你就不必改变现有的设计.浏览器将永远支持CSS2. CSS3 模块 CSS3被拆分为&quo ...
- CocoaPods更新2018年11月06日16:06:48
https://gems.ruby-china.org点进去就知道了…… CocoaPods命令 更新 sudo gem install -n /usr/local/bin cocoapods --p ...
- Java 网络编程(1):使用 NetworkInterface 获得本机在局域网内的 IP 地址
原文地址:https://segmentfault.com/a/1190000007462741 1.问题提出 在使用 Java 开发网络程序时,有时候我们需要知道本机在局域网中的 IP 地址.很常见 ...
- Python中and_Or
自 http://www.cnblogs.com/BeginMan/p/3197123.html 一.and: 在Python 中,and 和 or 执行布尔逻辑演算,如你所期待的一样,但是它们并不返 ...
- springboot中参数处理
springboot1中处理是这样的 @Configuration public class WebConfig extends WebMvcConfigurerAdapter{ @Autowired ...
- 偏函数-functools.partial
1.概念:偏函数是2.5版本以后引进来的东西.属于函数式编程的一部分,使用偏函数可以通过有效地“冻结”那些预先确定的参数,来缓存函数参数,然后在运行时,当获得需要的剩余参数后,可以将他们解冻,传递到最 ...