Description

[0,x]中全是1,其余全是0,每个点有一个权值,求最坏情况下得到x的最小权值.

Sol

DP+单调队列.

你可以去看我的这篇Blog...开这篇纯属为了骗访问...

http://www.cnblogs.com/beiyuoi/p/5974574.html

Code

/**************************************************************
Problem: 2448
User: BeiYu
Language: C++
Result: Accepted
Time:1316 ms
Memory:48420 kb
****************************************************************/
#include<cstdio>
#include<iostream>
using namespace std; const int N = 2005;
#define A(x) (f[i][x-1]+a[x])
#define B(x) (f[x+1][j]+a[x]) int n,a[N];
int f[N][N],g[N][N];
int q[N][N],h[N],t[N]; inline int in(int x=0,char ch=getchar(),int v=1){
while(ch!='-' && (ch>'9'||ch<'0')) ch=getchar();if(ch=='-') v=-1,ch=getchar();
while(ch>='0' && ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x*v; } int main(){
// freopen("in.in","r",stdin);
n=in();
for(int i=1;i<=n;i++) a[i]=in(); for(int i=n;i;--i){
f[i][i]=a[i],g[i][i]=i; //f[i][j]=min{ f[i][k-1]+t[k] },g[i][j]<=k<=j; =>q[0]
//f[i][j]=min{ f[k+1][j]+t[k] },i<=k<g[i][j]; =>q[j] h[0]=1,t[0]=0;
h[i]=1,t[i]=0;
q[i][++t[i]]=i; for(int j=i+1;j<=n;++j){
//g[i][j]
g[i][j]=g[i][j-1];
while(g[i][j]<j && f[i][g[i][j]-1] < f[g[i][j]+1][j]) ++g[i][j]; //q[0].pop g[i][j-1]--(g[i][j]-1)
for(int k=g[i][j-1];k<g[i][j];++k)
if(q[0][h[0]] == k) ++h[0];
//j->q[0]
while(h[0]<=t[0] && A(q[0][t[0]]) > A(j)) --t[0];
q[0][++t[0]]=j; //q[j].pop g[i+1][j]-g[i][j]
for(int k=g[i+1][j];k>=g[i][j];--k)
if(q[j][h[j]] == k) ++h[j];
//i->q[j]
while(h[j]<=t[j] && B(q[j][t[j]]) > B(i)) --t[j];
q[j][++t[j]]=i; //f[i][j]
f[i][j]=min(A(q[0][h[0]]),B(q[j][h[j]])); }
} // for(int i=1;i<=n;i++) for(int j=1;j<=n-i+1;j++) printf("%d%c",g[j][j+i-1]," \n"[j==n-i+1]);
// cout<<"***"<<endl;
// for(int i=1;i<=n;i++) for(int j=1;j<=n-i+1;j++) printf("%d%c",f[j][j+i-1]," \n"[j==n-i+1]); cout<<f[1][n]<<endl;
return 0;
}

  

BZOJ 2412: 电路检修的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. BZOJ 2448: 挖油

    Description [0,x]中全是1,其余全是0,每个点有一个权值,求最坏情况下得到x的最小权值. Sol DP+单调队列. 首先就是一个 \(O(n^3)\) 的DP. \(f[i][j]\) ...

  3. 3*060-A 日志记录

    电路检修遇到的问题: 今天在检修一块3060-A电路板时 发现   3.3V烫 但是3.3V路上的电容并没有短路 于是拆单片机   拆RS232EN  拆  FM24V 最后发现  原来是  1117 ...

  4. U盘常见故障及检修

    一般U盘故障分为软故障和硬故障,其中以软故障最为常见.  软故障主要是指U盘有坏块,从而导致U盘能被计算机识别,但没有盘符出现,或者有盘符出现,但当打开U盘时却提示要进行格式化,而格式化又不能成功.前 ...

  5. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

  6. [模拟电路] 2、Passive Band Pass Filter

    note: Some articles are very good in http://www.electronics-tutorials.ws/,I share them in the Cnblog ...

  7. BZOJ 3275: Number

    3275: Number Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 874  Solved: 371[Submit][Status][Discus ...

  8. BZOJ 2879: [Noi2012]美食节

    2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1834  Solved: 969[Submit][Status] ...

  9. bzoj 4610 Ceiling Functi

    bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...

随机推荐

  1. 自然语言16.1_Python自然语言处理学习笔记之信息提取步骤&分块(chunking)

    QQ:231469242 欢迎喜欢nltk朋友交流 http://www.cnblogs.com/undercurrent/p/4754944.html 一.信息提取模型 信息提取的步骤共分为五步,原 ...

  2. MySQL学习笔记——多表连接和子查询

    多表连接查询 # 返回的是两张表的乘积 SELECT * FROM tb_emp,tb_dept SELECT COUNT(*) FROM tb_emp,tb_dept # 标准写法,每个数据库都能这 ...

  3. c++vector(入门级)

    #include<iostream> #include<fstream>> #include<vector> using namespace std; voi ...

  4. 解决问题--VS2012中一个Panel覆盖另一个Panel时拖动时容易造成两个控件成父子关系的避免

    在*.Designer.cs中,假如想把panel1覆盖到panel2上,但是VS自动让panel1成为panel2的子控件了,在文件中会有this.panel2.Controls.Add(this. ...

  5. Mac技巧

    ////////////////////////////////////////////////////////////////////////////////PC键盘在Mac上的映射Ctrl = C ...

  6. canvas代替img渲染图片

    移动端用canvas代替img渲染图片,可以提高性能 var oImg = new Image(); oImg.src = url; oImg.onload = function(){ var cvs ...

  7. [Angularjs]系列——学习与实践

    写在前面 这个系列是来这家公司到现在,边用边学,以及在工作中遇到的问题进行的总结.深入的东西不多,大多是实际开发中用到的东西. 这里做一个目录,方便查看. 系列文章 [Angularjs]ng-sel ...

  8. Devexpress-1 DataGrid控件

    参考资料: 使用XtraGrid自定义列计算 DEV GridControl小结 实现对两列求和后作为新的列

  9. Spring实战 (第3版)——依赖注入

    首先弄明白几个概念: 1.什么是POJO 2.JavaBean规范 3.EJB(Enterprise JavaBean) 体会Spring如何简化Java开发. 创建应用对象(组件)之间协作关系的行为 ...

  10. shell编程中的select用法

    select 语句 select表达式是bash的一种扩展应用,擅长于交互式场合.用户可以从一组不同的值中进行选择: select var in ... ; do break; done .... n ...