codevs3002 石子归并3
3002 石子归并 3
题目描述 Description
有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1]。问安排怎样的合并顺序,能够使得总合并代价达到最小。
输入描述 Input Description
第一行一个整数n(n<=3000)
第二行n个整数w1,w2...wn (wi <= 3000)
输出描述 Output Description
一个整数表示最小合并代价
样例输入 Sample Input
4
4 1 1 4
样例输出 Sample Output
18
数据范围及提示 Data Size & Hint
数据范围相比“石子归并” 扩大了
这个题和石子归并1唯一的区别就是数据范围变大了
于是用基本的做法写出来就TLE,只能得50分
这道题正确的解法是四边形不等式优化dp,为此初步了解四边形不等式优化方法
通俗的说,就是多了一个s[l][r]数组,用以记录得到l到r区间的最优解用的是哪个点作为断点
关于s[][]的正确性的证明我还没能弄懂,不过其原理很显然,在石子归并问题中其断点随区间向右移动,是有单调性的,因此有s(i,j-1)≤s(i,j)≤s(i+1,j)
所以在区间l到r内枚举断点时只需要枚举s[l][r-1]~s[l+1][r]之间的点
复杂度降为n^2
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=,inf=;
int f[maxn][maxn],s[maxn][maxn];
int n,a[maxn],w[maxn][maxn];
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
w[i][i]=a[i];
}
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
w[i][j]=w[i][j-]+a[j];
for(int i=;i<=n;i++)s[i][i]=i;
for(int p=;p<n;p++){
for(int i=;i<=n-p;i++){
int j=i+p;
f[i][j]=inf;
for(int k=s[i][j-];k<=s[i+][j];k++){
if(f[i][j]>f[i][k]+f[k+][j]+w[i][j]){
f[i][j]=f[i][k]+f[k+][j]+w[i][j];
s[i][j]=k;
}
}
}
}
printf("%d",f[][n]);
}
codevs3002 石子归并3的更多相关文章
- codevs3002 石子归并 3
题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1].问安排怎样的合并顺序,能够使 ...
- codevs3002石子归并3(四边形不等式优化dp)
3002 石子归并 3 参考 http://it.dgzx.net/drkt/oszt/zltk/yxlw/dongtai3.htm 时间限制: 1 s 空间限制: 256000 KB 题目等级 ...
- AC日记——石子归并 codevs 1048
1048 石子归并 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 有n堆石子排成一列,每堆石子 ...
- 51nod 1021 石子归并(dp)
51nod 1021 石子归并 题解:从i到j合并的最小值:dp[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j] + sum[j] - sum[i-1]); 最 ...
- 51nod1022 石子归并 V2
证明w满足四边形不等式,这里w是m的附属量,形如m[i,j]=opt{m[i,k]+m[k,j]+w[i,j]},此时大多要先证明w满足条件才能进一步证明m满足条件证明m满足四边形不等式证明s[i,j ...
- Codevs 1048 石子归并
1048 石子归并 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合 ...
- Codevs_2102_石子归并2_(环状动态规划)
描述 http://codevs.cn/problem/2102/ 2102 石子归并 2 时间限制: 10 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目 ...
- Codevs_1048_石子归并_(动态规划)
描述 http://codevs.cn/problem/1048/ 1048 石子归并 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Des ...
- 51 nod 1023 石子归并 V3(GarsiaWachs算法)
1023 石子归并 V3基准时间限制:2 秒 空间限制:131072 KB 分值: 320 难度:7级算法题 N堆石子摆成一条线.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一 ...
随机推荐
- 通过JMX获取weblogic的监控指标
通过JMX获取weblogic的监控数据,包括JDBC,SESSION,SERVERLET,JVM等信息.主要用到weblogic自己的t3协议,所以要用到weblogic的jar包:wlfullcl ...
- JETSON TK1 ~ 控制GPIO
首先建立个存放gpio代码的文件夹,CD到该文件夹. git clone git://github.com/derekmolloy/boneDeviceTree/ 解压后会出现几个文件 GPIO文件夹 ...
- cad定制快捷键
1.工具-自定义-编辑程序参数,改好之后,关闭. 2.在命令行输入:reinit-选择PGP文件-确定.
- oracle数据库-备份ORACLE为dmp类型数据
刘备,为自己后期脑子不灵光时可以找个可以翻阅的地方. 一.第一部分导出ORACLE数据 1.数据库地址及账号密码: 数据库地址:10.10.10.132账号密码:oracle/oracle 2.使用X ...
- BZOJ_2064_分裂_状压DP
BZOJ_2064_分裂_状压DP Description 背景: 和久必分,分久必和... 题目描述: 中国历史上上分分和和次数非常多..通读中国历史的WJMZBMR表示毫无压力. 同时经常搞OI的 ...
- ACM学习历程—HDU1003 Max Sum(dp && 最大子序列和)
Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub ...
- tomcat集群--单tomcat多实例
1.解压apache-tomcat-7.0.75.tar.gz到任意目录 /data/tomcat-4X 2.建立tomcat多实例目录,这个tomcat-4X运行4X应用的两个实例4002,4004 ...
- linux 中spfvim安装
1. 安装 git 1.1 安装依赖的包: curl curl-devel zlib-devel openssl-devel perl c ...
- Python实例浅谈之五Python守护进程和脚本单例运行
一.简介 守护进程最重要的特性是后台运行:它必须与其运行前的环境隔离开来,这些环境包括未关闭的文件描述符.控制终端.会话和进程组.工作目录以及文件创建掩码等:它可以在系统启动时从启动脚本/etc/rc ...
- HDU4391(线段树+剪枝)
Paint The Wall Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...