bzoj 1200: [HNOI2005]木梳 DP
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
4 4 6 5 4 2 3 3 5
Sample Output
#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的更多相关文章
- 1200: [HNOI2005]木梳 - BZOJ
Description Input 第一行为整数L,其中4<=L<=100000,且有50%的数据满足L<=104,表示木板下侧直线段的长.第二行为L个正整数A1,A2,…,AL ...
- BZOJ 1200 木梳
Description Input 第一行为整数L,其中4≤L≤100000,且有50%的数据满足L≤104,表示木板下侧直线段的长.第二行为L个正整数A1,A2,…,AL,其中Ai≤108 Outp ...
- [BZOJ 3791] 作业 【DP】
题目链接:BZOJ - 3791 题目分析 一个性质:将一个序列染色 k 次,每次染连续的一段,最多将序列染成 2k-1 段不同的颜色. 那么就可以 DP 了,f[i][j][0|1] 表示到第 i ...
- [BZOJ 2165] 大楼 【DP + 倍增 + 二进制】
题目链接:BZOJ - 2165 题目分析: 这道题我读了题之后就想不出来怎么做,题解也找不到,于是就请教了黄学长,黄学长立刻秒掉了这道题,然后我再看他的题解才写出来..Orz 使用 DP + 倍增 ...
- BZOJ.3425.[POI2013]Polarization(DP 多重背包 二进制优化)
BZOJ 洛谷 最小可到达点对数自然是把一条路径上的边不断反向,也就是黑白染色后都由黑点指向白点.这样答案就是\(n-1\). 最大可到达点对数,容易想到找一个点\(a\),然后将其子树分为两部分\( ...
- BZOJ 4380 [POI2015]Myjnie | DP
链接 BZOJ 4380 题面 有n家洗车店从左往右排成一排,每家店都有一个正整数价格p[i]. 有m个人要来消费,第i个人会驶过第a[i]个开始一直到第b[i]个洗车店,且会选择这些店中最便宜的一个 ...
- BZOJ.5311.贞鱼(DP 决策单调)
题目链接 很容易写出\(O(n^2k)\)的DP方程.然后显然决策点是单调的,于是维护决策点就可以了.. 这个过程看代码或者别的博客吧我不写了..(其实是忘了) 这样复杂度\(O(nk\log n)\ ...
- 【BZOJ 3090】 树形DP
3090: Coci2009 [podjela] Description 有 N 个农民, 他们住在 N 个不同的村子里. 这 N 个村子形成一棵树.每个农民初始时获得 X 的钱.每一次操作, 一个农 ...
- bzoj 1030 fail树dp
dp[i][j][0]代表当前匹配到i号点走了j步且没到过单词节点,1代表到过,直接转移. #include<iostream> #include<cstdio> #inclu ...
随机推荐
- ssh-add命令
ssh-add命令是把专用密钥添加到ssh-agent的高速缓存中.该命令位置在/usr/bin/ssh-add ➜ ydoc git:(v2.0.0) ✗ sudo ssh-add ~/.ssh/i ...
- 自定的TableView
一.自定的TableView 有的时候,我们需要vc视图中添加一个表视图,此时在ViewController中使用TableViewController是不可行的这就,因此就要使用自定义的TableV ...
- volatile的使用原则
为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/4352802.html ...
- Spring对Hibernate事务管理【转】
在谈Spring事务管理之前我们想一下在我们不用Spring的时候,在Hibernate中我们是怎么进行数据操作的.在Hibernate中我们每次进行一个操作的的时候我们都是要先开启事务,然后进行数据 ...
- Ubuntu server搭建vsftpd小记
Ubuntu server中搭建vsftpd小记 <h1> 在Ubuntu server中安装vsftpd</h1> sudo apt-get install vsftpd & ...
- SQLServe错误整理
1. sql拒绝访问?提示SQL Serve不存在或访问被拒绝 (SQL Server does not exist or access denied.) (A) 1:你如果是独立上网的请把21端口打 ...
- Character Studio
- c语言学习之基础知识点介绍(十一):字符串的介绍、使用
本节主要介绍c语言中的字符串的应用. 一:字符串介绍 因为c语言中没有像Java.C#那样的字符串类型,所以无法直接用字符串.需要借助数组来解决这个问题. /* 定义:把多个字符连在一起就叫字符串.但 ...
- Objective-C 中的方法回掉
Objective-C 中的方法回掉 Objective-C 中的方法调用 OC 类似C+,避免不了的内部的各种通信手段,函数调用,变量传递等,避免不了各种回掉等. 一.class直接调用 或者 o ...
- Linux常用(持续更新)
1. scp ./bcec_computernode_check.sh root@10.254.3.1:/tmp 2. # uname -a # cat /proc/version # cat /e ...