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 ...
随机推荐
- 【转】补充说明:关于Beaglebone black上debian无图形界面的问题及QT的窗口示例
有个兄弟发了一个站内的私信给我,内容如下: 时间:2014-03-05 09:08:19 大哥,debian 的BBB版本没有图形界面吧 我安装后只有文本界面 我突然意识到,我前面有没有说清楚的地方, ...
- 关于Bufferedreader的功能扩写
package cn.hncu.pattern.decorator.v1; import java.io.FileReader;import java.io.IOException; public c ...
- ZBLibrary不能运行的解决方法
ADT运行 右键ZBLibrary Demo > Run as > Android Application 可能出现部分错误,解决方案如下: 右键Project(这里为ZBLibrar ...
- linux 常用查找命令 小技巧
wc -l `find . -name "*.css"`|tail -n1 指定目录下 在指定后缀文件 查找关键字 find ./ -name "*" -exe ...
- Bind开启IPv6功能
[root@localhost sbin]# ./named -v bind 9.5.1-p3-v3.0.9 1,服务器开启IPv6服务 网卡配置v6地址 [root@localhost ~]# if ...
- 安卓项目-利用Sqlite数据库,开发新闻发布系统
本教程致力于程序员可以快速的学习安卓移动端手机开发. 适合于已经习得一种编程语言的同仁. 更多志同道合,想要学习更多编程技术的大神们. 小弟不才,麻烦关注一下我的今日头条号-做全栈攻城狮. 本文章是基 ...
- magento 操作数据库
查: $read = Mage::getSingleton(“core/resource”)->getConnection(‘core_read’); $sql = “selec ...
- NET环境下的未处理异常(unhandled exception)的解决方案
NET环境下的未处理异常(unhandled exception )的解决方案 .Net 框架提供了非常强大的异常处理机制,同时对一些非托管代码很难控制的系统问题比如指针越界,内存泄漏等提供了很好的解 ...
- CentOS 6.4安装OpenOffice
终端依次输入: (1)sudo yum install openoffice.org-writer (2) sudo yum install openoffice.org-calc (3) sudo ...
- android使用广播退出应用程序
由于在(Widget或Service.BroadcastReceiver中)使用startActivity()方法启动activity时需使用FLAG_ACTIVITY_NEW_TASK flag,所 ...