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)的值是可以预处理出来的. 下 ...
随机推荐
- Python面向对象类的特殊成员方法
类的特殊成员方法:1.__doc__ : 打印类下面的注释 2.__module__和__class__:from lib.aa import C输出类被导出的模块名lib.aa,输出类的模块名和类名 ...
- Word2Vec的基本使用
目录 1.建立模型 2.保存与加载模型 3.使用模型 gensim 是 Python 中一款强大的 自然语言处理工具,它包含了常见的模型,其中便有 Word2Vec 这一优秀的 词向量训练工具,可以使 ...
- python virtualenv 虚拟环境的应用
为什么要使用python的虚拟环境呢?: 首先我们来说不实用虚拟环境的情况: 在Python应用程序开发的过程中,系统安装的Python3只有一个版本:3.7.所有第三方的包都会被pip3安装到 ...
- DAS、NAS、SAN、iSCSI 存储方案概述
(转自https://blog.csdn.net/tianlesoftware/article/details/6201346) 目前服务器所使用的专业存储方案有DAS.NAS.SAN.iSCSI几种 ...
- top Universities in Mechanical Engineering
- vue api
1. vue.config.silent = true 取消 Vue 所有的日志与警告. 2.vue.config.productionTip= false 设置为 false 以阻止 vue 在启动 ...
- HDU 1212 大整数的取模运算
因为这里是MOD最大为100000 所以我将字符串看作5个一组,并记录后面跟了多少个100000 每次取5个数根据其数据进行取模更新 注意过程中 100000*100000会超int #include ...
- 页面加载即执行JQuery的三种方法
[1]$(function( ){ }): $(function(){ $("#name").click(function(){ //adding your code here } ...
- Frame Stacking 拓扑排序 图论
Description Consider the following 5 picture frames placed on an 9 x 8 array. ........ ........ .... ...
- JAVA NIO 之NIO简介
复习NIO知识,权当做笔记~~ 在NIO之前先复习一下 1.I/O类简图 2.通常我们把网络通信也归到IO行为中,例如网络编程中的scoket通信. 不管是磁盘I/O,还是网络I/O,数据在写入Ou ...