博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[NOI1995]石子合并 四边形不等式优化
阅读量:5058 次
发布时间:2019-06-12

本文共 1380 字,大约阅读时间需要 4 分钟。

链接

思路

总之就是很牛逼的四边形不等式优化

复杂度\(O(n^2)\)

代码

#include 
#include
#include
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;}

转载于:https://www.cnblogs.com/dsrdsr/p/10439923.html

你可能感兴趣的文章
PHP、Java、Python、C、C++ 这几种编程语言都各有什么特点或优点?
查看>>
感谢青春
查看>>
Jquery Uploadify4.2 falsh 实现上传
查看>>
雨林木风 GHOST_XP SP3 快速装机版YN12.08
查看>>
linux基础-命令
查看>>
java对象的深浅克隆
查看>>
Hadoop流程---从tpch到hive
查看>>
数据结构3——浅谈zkw线段树
查看>>
Introduction to my galaxy engine 2: Depth of field
查看>>
V2019 Super DSP3 Odometer Correction Vehicle List
查看>>
Python 3.X 练习集100题 05
查看>>
今时不同往日:VS2010十大绝技让VS6叹服
查看>>
设计器 和后台代码的转换 快捷键
查看>>
在线视频播放软件
查看>>
用代码生成器生成的DAL数据访问操作类 基本满足需求了
查看>>
28初识线程
查看>>
Monkey测试结果分析
查看>>
Sublime Text 3 设置
查看>>
浅谈C++底层机制
查看>>
STL——配接器、常用算法使用
查看>>