1200: [HNOI2005]木梳

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 266  Solved: 125
[Submit][Status]

Description

Input

第一行为整数L,其中4<=L<=100000,且有50%的数据满足L<=104,表示木板下侧直线段的长。第二行为L个正整数A1,A2,…,AL,其中1

Output

仅包含一个整数D,表示为使梳子面积最大,需要从木板上挖掉的格子数。

Sample Input

9
4 4 6 5 4 2 3 3 5

Sample Output

3
 
 
 
  一般的贪心策略还是需要较严格的证明的。比如这道题,位置pos所处的可能高度应该是h[i]+/-1  (pos-2<=i<=pos+2)稍有疏忽,就会将i的范围搞错。
 
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
using namespace std;
#define MAXN 110000
#define INFL 0x3f3f3f3f3f3f3f3fLL
typedef long long qword;
int h[MAXN];
int pp[MAXN][];;
qword dp[MAXN][][];
inline void deal(qword &x,qword y)
{
if (x<y)x=y;
}
int main()
{
freopen("input.txt","r",stdin);
int i,j,k,k2,x,y,z,n,m;
qword sum=;
scanf("%d",&n);
for (i=;i<=n;i++)
{
scanf("%d",h+i);
sum+=h[i];
for (j=h[i]-;j<=h[i]+;j++)
{
pp[i][++pp[i][]]=j;
if (i->=)pp[i-][++pp[i-][]]=j;
if (i+<=n)pp[i+][++pp[i+][]]=j;
if (i->=)pp[i-][++pp[i-][]]=j;
if (i+<=n)pp[i+][++pp[i+][]]=j;
}
}
for (i=;i<=n;i++)
{
sort(pp[i]+,pp[i]+pp[i][]+);
pp[i][]=unique(&pp[i][],&pp[i][pp[i][]+])-pp[i]-;
for (j=pp[i][]+;j<;j++)pp[i][j]=;
while (pp[i][] && pp[i][pp[i][]]>h[i])pp[i][pp[i][]--]=;
}
for (i=;i<=n+;i++)
for (j=;j<;j++)
for (k=;k<;k++)
dp[i][j][k]=-INFL;
for (i=;i<=pp[][];i++)
dp[][][i]=dp[][][i]=pp[][i];
for (i=;i<=n;i++)
{
for (j=;j<=pp[i-][];j++)
{
for (k=;k<=pp[i][];k++)
{
if (pp[i-][j]<pp[i][k])
{
deal(dp[i][][k],dp[i-][][j]+pp[i][k]);
}else if (pp[i-][j]>pp[i][k])
{
deal(dp[i][][k],dp[i-][][j]+pp[i][k]);
}else
{
deal(dp[i][][k],dp[i-][][j]+pp[i][k]);
deal(dp[i][][k],dp[i-][][j]+pp[i][k]);
}
}
}
}
qword ans=-INFL;
for (i=;i<=pp[n][];i++)
{
ans=max(ans,dp[n][][i]);
ans=max(ans,dp[n][][i]);
}
printf("%lld",sum-ans);
}

bzoj 1200: [HNOI2005]木梳 DP的更多相关文章

  1. 1200: [HNOI2005]木梳 - BZOJ

    Description   Input 第一行为整数L,其中4<=L<=100000,且有50%的数据满足L<=104,表示木板下侧直线段的长.第二行为L个正整数A1,A2,…,AL ...

  2. BZOJ 1200 木梳

    Description Input 第一行为整数L,其中4≤L≤100000,且有50%的数据满足L≤104,表示木板下侧直线段的长.第二行为L个正整数A1,A2,…,AL,其中Ai≤108 Outp ...

  3. [BZOJ 3791] 作业 【DP】

    题目链接:BZOJ - 3791 题目分析 一个性质:将一个序列染色 k 次,每次染连续的一段,最多将序列染成 2k-1 段不同的颜色. 那么就可以 DP 了,f[i][j][0|1] 表示到第 i ...

  4. [BZOJ 2165] 大楼 【DP + 倍增 + 二进制】

    题目链接:BZOJ - 2165 题目分析: 这道题我读了题之后就想不出来怎么做,题解也找不到,于是就请教了黄学长,黄学长立刻秒掉了这道题,然后我再看他的题解才写出来..Orz 使用 DP + 倍增 ...

  5. BZOJ.3425.[POI2013]Polarization(DP 多重背包 二进制优化)

    BZOJ 洛谷 最小可到达点对数自然是把一条路径上的边不断反向,也就是黑白染色后都由黑点指向白点.这样答案就是\(n-1\). 最大可到达点对数,容易想到找一个点\(a\),然后将其子树分为两部分\( ...

  6. BZOJ 4380 [POI2015]Myjnie | DP

    链接 BZOJ 4380 题面 有n家洗车店从左往右排成一排,每家店都有一个正整数价格p[i]. 有m个人要来消费,第i个人会驶过第a[i]个开始一直到第b[i]个洗车店,且会选择这些店中最便宜的一个 ...

  7. BZOJ.5311.贞鱼(DP 决策单调)

    题目链接 很容易写出\(O(n^2k)\)的DP方程.然后显然决策点是单调的,于是维护决策点就可以了.. 这个过程看代码或者别的博客吧我不写了..(其实是忘了) 这样复杂度\(O(nk\log n)\ ...

  8. 【BZOJ 3090】 树形DP

    3090: Coci2009 [podjela] Description 有 N 个农民, 他们住在 N 个不同的村子里. 这 N 个村子形成一棵树.每个农民初始时获得 X 的钱.每一次操作, 一个农 ...

  9. bzoj 1030 fail树dp

    dp[i][j][0]代表当前匹配到i号点走了j步且没到过单词节点,1代表到过,直接转移. #include<iostream> #include<cstdio> #inclu ...

随机推荐

  1. Spring安全资料整理列表

    Spring 被爆漏洞,允许远程执行代码http://automationqa.com/forum.php?mod=viewthread&tid=2827&fromuid=21 Spr ...

  2. Manually connecting to the Oracle Linux Yum Server

    Manually connecting to the Oracle Linux Yum Server 1. Download and Install Oracle Linux   Note: The ...

  3. HttpClient 通过域名访问请求接口出现java.net.UnknownHostException解决方法

    在项目中,有一个功能需要请求另外一个项目的接口来获取数据.该项目接口都是通过域名请求访问.每当调用到一定阶段后都会出现未知域名,导致请求数据失败.以下是错误内容 java.net.UnknownHos ...

  4. Java并发——线程安全、线程同步、线程通信

    线程安全 进程间"共享"对象 多个“写”线程同时访问对象. 例:Timer实例的num成员,即add()方法是用的次数.即Timer实例是资源对象. class TestSync ...

  5. Ubuntu server搭建vsftpd小记

    Ubuntu server中搭建vsftpd小记 <h1> 在Ubuntu server中安装vsftpd</h1> sudo apt-get install vsftpd & ...

  6. Win10 10586 更新

    最近发现,电脑c盘突然少了许多,发现c盘多了个windowsBT文件夹,大概6个G,恩,win10 又推出更新了,版本10586. 不知道为啥,更新时win10 把原来的下载的删除了,大概出了什么错误 ...

  7. 经历:sybase的sql查询,当传递的参数中包含全角空格(\u00a0),查询慢

    今天,我遇到了一个sybase数据库查询的问题.一句简单的sql,但是不知道为什么查询不出来,导致生产生产服务器频频挂掉.吓得我的小心脏砰砰啊. select DISTINCT A.FCIL_CDE ...

  8. Entity Framework 的事务 DbTransaction

    事务代码实现如下: public static void Transaction() { myitEntities entity = null; DbTransaction tran = null; ...

  9. C# 利用TextBox的Text属性实现换行加字符 "\r\n"

    要让一个TextBox显示多行文本就得把它的Multiline属性设置为true,可是如果你是要把TextBox的Text属性设置多行文本时,换行符由两个字符组成:"\r\n". ...

  10. 疯狂学习java web

    因工作需要,疯狂学习java web,只是这么多年一直从事C++开发,突然之间要接手同事的那么一大堆代码,真有无从下手的感觉,首先是要学习html,然后是js, 然后是jsp,当然还有各种框架,想想就 ...