[NOI1995]石子合并 四边形不等式优化
链接
https://www.luogu.org/problemnew/show/P1880
思路
总之就是很牛逼的四边形不等式优化
复杂度\(O(n^2)\)
代码
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int N=207;
int read() {
int x=0,f=1;char s=getchar();
for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;
for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';
return x*f;
}
int n,a[N],sum[N],f[2][N][N],g[N][N];
inline int max(int a,int b) {return a>b?a:b;}
inline int min(int a,int b) {return a>b?b:a;}
int main() {
n=read();
for(int i=1;i<=n;++i) a[i+n]=a[i]=read();
for(int i=1;i<=n+n;++i) sum[i]=sum[i-1]+a[i];
memset(f[0],0x3f,sizeof(f[0]));
for(int i=1;i<=n+n;++i) f[0][i][i]=f[1][i][i]=0,g[i][i]=i;
for(int len=2;len<=n;++len) {
for(int i=1;i<=n+n;++i) {
int j=i+len-1;
if(j>n+n) continue;
f[1][i][j]=max(f[1][i][j-1],f[1][i+1][j])+sum[j]-sum[i-1];
for(int k=g[i][j-1];k<=g[i+1][j];++k) {
if(f[0][i][j]>f[0][i][k]+f[0][k+1][j]+sum[j]-sum[i-1]) {
f[0][i][j]=f[0][i][k]+f[0][k+1][j]+sum[j]-sum[i-1];
g[i][j]=k;
}
}
}
}
int ans[2]={0x3f3f3f3f,-0x3f3f3f3f};
for(int i=1;i<=n;++i) {
ans[0]=min(ans[0],f[0][i][i+n-1]);
ans[1]=max(ans[1],f[1][i][i+n-1]);
}
printf("%d\n%d\n",ans[0],ans[1]);
return 0;
}
[NOI1995]石子合并 四边形不等式优化的更多相关文章
- P1880 [NOI1995]石子合并[区间dp+四边形不等式优化]
P1880 [NOI1995]石子合并 丢个地址就跑(关于四边形不等式复杂度是n方的证明) 嗯所以这题利用决策的单调性来减少k断点的枚举次数.具体看lyd书.这部分很生疏,但是我还是选择先不管了. # ...
- 区间DP石子合并问题 & 四边形不等式优化
入门区间DP,第一个问题就是线性的规模小的石子合并问题 dp数组的含义是第i堆到第j堆进行合并的最优值 就是说dp[i][j]可以由dp[i][k]和dp[k+1][j]转移过来 状态转移方程 dp[ ...
- 四边形不等式优化DP——石子合并问题 学习笔记
好方啊马上就要区域赛了连DP都不会QAQ 毛子青<动态规划算法的优化技巧>论文里面提到了一类问题:石子合并. n堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的 ...
- 【无聊放个模板系列】HDU 3506 (四边形不等式优化DP-经典石子合并问题[环形])
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #inc ...
- 51nod 1022 石子归并 V2 —— DP四边形不等式优化
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1022 1022 石子归并 V2 基准时间限制:1 秒 空间限 ...
- codevs3002石子归并3(四边形不等式优化dp)
3002 石子归并 3 参考 http://it.dgzx.net/drkt/oszt/zltk/yxlw/dongtai3.htm 时间限制: 1 s 空间限制: 256000 KB 题目等级 ...
- Codevs 3002 石子归并 3(DP四边形不等式优化)
3002 石子归并 3 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次 ...
- [51nod 1022] 石子归并v2 [dp+四边形不等式优化]
题面: 传送门 思路: 加强版的石子归并,现在朴素的区间dp无法解决问题了 首先我们破环成链,复制一条一样的链并粘贴到原来的链后面,变成一个2n长度的序列,在它上面dp,效率O(8n^3) 显然是过不 ...
- 区间dp+四边形不等式优化
区间dp+四边形优化 luogu:p2858 题意 给出一列数 \(v_i\),每天只能取两端的数,第 j 天取数价值为\(v_i \times j\),最大价值?? 转移方程 dp[i][j] :n ...
随机推荐
- windows中查看端口占用情况
说几个命令, netstat 用于查看进程端口占用情况,用法可以使用netstat -h 查看 tasklist 列出当前进程,有进程号 findstr 用于过滤字符串 大致过程就是: 1. 使用 n ...
- Unity3d之表情动画--眨眼
可通过BlendShape来实现眨眼动画,效果如下: 转载请注明出处:http://www.cnblogs.com/jietian331/p/7054673.html 代码如下: using Unit ...
- wordpress练习
---恢复内容开始--- wp_options数据表储存网站的一些基本信息 bloginfo() //输出 bloginfo('stylesheet_url') //输出style.cs ...
- meta twitter 属性
总结下国际范儿的meta标签 <meta name="A game made to inspire developers to use GSAP, ES6 and Flexbox&qu ...
- Codeforces Round #324 (Div. 2) E
这题贪心,考虑先放第一个,然后从第一个数在p中的位置, 不断的往前走,和在他后面的那些数组进行交换,因为这样交换可以提高最大的效率,就是说你花费了1但是使得两个点都朝他的木匾节点减少了1 #inclu ...
- 如何注销Sitecore CMS
登录Sitecore很容易,但是在旧版本的Sitecore中使用不同的界面,退出可能会给未经证实的人带来挑战. Sitecore 8 Sitecore 6和7 Sitecore 8 Sitecore ...
- 【转】基于Selenium的web自动化框架(python)
1 什么是selenium Selenium 是一个基于浏览器的自动化工具,它提供了一种跨平台.跨浏览器的端到端的web自动化解决方案.Selenium主要包括三部分:Selenium IDE.Sel ...
- GCD(Swift)
1.取消过去的接口 说起 GCD, 大家肯定回想起类似 dispatch_async 这样的语法. GCD 的这个语法模式无论是和 Objc 还是 Swift 的整体风格都不太打掉. 所以 Swift ...
- 【Redis学习之十一】Java客户端实现redis集群操作
客户端:jedis-2.7.2.jar 配置文件两种方式: properties: redis.cluster.nodes1=192.168.1.117 redis.cluster.port1=700 ...
- ODBC数据库
ODBC数据源全称是开放数据库互连(Open Database Connectivity),在微软公司开放的数据库结构中的一部分,其实是一个应用程序的接口,主要用于提供数据库的编写应用程序的能力.