codevs3002石子归并3(四边形不等式优化dp)
3002 石子归并 3
参考 http://it.dgzx.net/drkt/oszt/zltk/yxlw/dongtai3.htm
有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1]。问安排怎样的合并顺序,能够使得总合并代价达到最小。
第一行一个整数n(n<=3000)
第二行n个整数w1,w2...wn (wi <= 3000)
一个整数表示最小合并代价
4
4 1 1 4
18
数据范围相比“石子归并” 扩大了
/*
据说是一道四边形不等式优化dp的典型例题,然而我一知半解的并没有搞懂23333
只能抄下来背过......
还据说有一个GarsiaWachs算法专门解决这个问题,并且思想特别好懂
然而我这么若没有看懂代码......
唉!先存着以后再看吧。
*/
#include<cstdio>
#include<cstring>
#define N 3010 using namespace std;
int n,s[N],f[N][N],b[N][N];
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&s[i]),s[i]+=s[i-];
for(int i=;i<=n;i++)
b[i][i]=i;
for(int j=;j<=n;j++)
for(int i=j-;i>>&&j-i<n;i--)
{
f[i][j]=0x7fffffff;
for(int k=b[i][j-];k<=b[i+][j];k++)
{
if(f[i][j]>f[i][k]+f[k+][j]+s[j]-s[i-]){
f[i][j]=f[i][k]+f[k+][j]+s[j]-s[i-];
b[i][j]=k;
}
}
}
printf("%d\n",f[][n]);
return ;
}
我不会啊我不会
codevs3002石子归并3(四边形不等式优化dp)的更多相关文章
- 石子合并(四边形不等式优化dp) POJ1160
该来的总是要来的———————— 经典问题,石子合并. 对于 f[i][j]= min{f[i][k]+f[k+1][j]+w[i][j]} From 黑书 凸四边形不等式:w[a][c]+w[b][ ...
- 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 ...
- 【转】斜率优化DP和四边形不等式优化DP整理
(自己的理解:首先考虑单调队列,不行时考虑斜率,再不行就考虑不等式什么的东西) 当dp的状态转移方程dp[i]的状态i需要从前面(0~i-1)个状态找出最优子决策做转移时 我们常常需要双重循环 (一重 ...
- CF321E Ciel and Gondolas Wqs二分 四边形不等式优化dp 决策单调性
LINK:CF321E Ciel and Gondolas 很少遇到这么有意思的题目了.虽然很套路.. 容易想到dp \(f_{i,j}\)表示前i段分了j段的最小值 转移需要维护一个\(cost(i ...
- 区间DP石子合并问题 & 四边形不等式优化
入门区间DP,第一个问题就是线性的规模小的石子合并问题 dp数组的含义是第i堆到第j堆进行合并的最优值 就是说dp[i][j]可以由dp[i][k]和dp[k+1][j]转移过来 状态转移方程 dp[ ...
- 四边形不等式优化DP——石子合并问题 学习笔记
好方啊马上就要区域赛了连DP都不会QAQ 毛子青<动态规划算法的优化技巧>论文里面提到了一类问题:石子合并. n堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的 ...
- HDU 2829 Lawrence (斜率优化DP或四边形不等式优化DP)
题意:给定 n 个数,要你将其分成m + 1组,要求每组数必须是连续的而且要求得到的价值最小.一组数的价值定义为该组内任意两个数乘积之和,如果某组中仅有一个数,那么该组数的价值为0. 析:DP状态方程 ...
- 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)的值是可以预处理出来的. 下 ...
随机推荐
- Tensorflow学习笔记(1):tf.slice()函数使用
tensorflow 当中的一个常用函数:Slice() def slice(input_, begin, size, name=None) 函数的功能是根据begin和size指定获取input的部 ...
- 瑞芯微ROCK960 RK3399烧录image后扩容rootfs
问题描述: RK3399开发板烧录官网提供的ubuntu镜像: Ubuntu 16.04 Server arm64(下载地址:https://www.96boards.org/documentatio ...
- 【tips】自动化测试工具 - selenium和phantomJS
### 目录清单 selenium和phantomjs概述 selenium常用API 案例操作:模拟登陆csdn 1. selenium和phantomJS是什么东西 selenium是一套web网 ...
- Maven学习总结(30)——Maven项目通用三级版本号说明
项目版本号说明 当前版本号:1.0.0-SNAPSHOT 本项目采用通用的三级版本号,版本号格式是[主版本号].[副版本号].[修复版本号]-[稳定状态],如:1.0.0-SNAPS ...
- Netty学习总结(4)——图解Netty之Pipeline、channel、Context之间的数据流向
以下所绘制图形均基于Netty4.0.28版本. 一.connect(outbound类型事件) 当用户调用channel的connect时,会发起一个outbound类型的事件,该事件将在pipel ...
- fzu2143 Board Game
Board Game Accept: 54 Submit: 151Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Descri ...
- 学习MongoDB--(5-2):索引(查看索引的使用,管理索引)
前一篇简单介绍了索引,并给出了基本的索引使用,这一次,我们进一步说一下MongoDB中的索引,包括如何查看查询是否走索引,如何管理索引和地理空间索引等. [使用explain和hint] 前面讲高级查 ...
- [bzoj 1005][HNOI 2008]明明的烦恼(prufer数列+排列组合)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1005 分析: 首先prufer数列:http://baike.baidu.com/view/1 ...
- [bzoj1040][ZJOI2007]骑士(环套树DP)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1040 分析:第一感觉肯定是树形DP,但可惜不是树.仔细分析,这个图很特殊,每个联通块肯 ...
- PHP array_merge()
定义和用法 array_merge() 函数把两个或多个数组合并为一个数组. 如果键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的).如果数组是数字索引的,则键名会以连续方式重新索引. ...