BZOJ 1200 木梳
Description


Input
第一行为整数L,其中4≤L≤100000,且有50%的数据满足L≤104,表示木板下侧直线段的长。第二行为L个正整数A1,A2,…,AL,其中Ai≤108
Output
仅包含一个整数D,表示为使梳子面积最大,需要从木板上挖掉的格子数。
Sample Input
4 4 6 5 4 2 3 3 5
Sample Output

HINT
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
using namespace std; #define inf (1LL<<60)
#define maxn 100010
typedef long long ll;
int h[maxn],pp[maxn][],n; ll f[maxn][][],ans=inf,sum; int main()
{
freopen("1200.in","r",stdin);
freopen("1200.out","w",stdout);
scanf("%d",&n);
for (int i = ;i <= n;++i)
{
scanf("%d",h+i); sum += h[i];
for (int j = h[i] - ;j <= h[i] + ;++j)
{
pp[i][++pp[i][]] = j;
if (i-) pp[i-][++pp[i-][]] = j;
if (i-) pp[i-][++pp[i-][]] = j;
if (i + <= n) pp[i+][++pp[i+][]] = j;
if (i + <= n) pp[i+][++pp[i+][]] = j;
}
}
for (int i = ;i <= n;++i)
{
sort(pp[i]+,pp[i]+pp[i][]+);
pp[i][] = unique(pp[i]+,pp[i]+pp[i][]+)-pp[i]-;
while (pp[i][] && pp[i][pp[i][]] > h[i]) --pp[i][];
}
memset(f,,sizeof(f));
for (int i = ;i <= pp[][];++i) f[][][i] = f[][][i] = pp[][i];
for (int i = ;i <= n;++i)
for (int j = ;j <= pp[i-][];++j)
for (int k = ;k <= pp[i][];++k)
{
if (pp[i-][j]<pp[i][k])
f[i][][k] = max(f[i][][k],f[i-][][j]+pp[i][k]);
else if (pp[i-][j]>pp[i][k])
f[i][][k] = max(f[i][][k],f[i-][][j]+pp[i][k]);
else
{
f[i][][k] = max(f[i][][k],f[i-][][j]+pp[i][k]);
f[i][][k] = max(f[i][][k],f[i-][][j]+pp[i][k]);
}
}
ans = 1LL<<;
for (int p = ;p < ;++p)
for (int j = ;j <= pp[n][];++j)
ans = min(ans,sum-f[n][p][j]);
printf("%lld",ans);
fclose(stdin); fclose(stdout);
return ;
}
BZOJ 1200 木梳的更多相关文章
- bzoj 1200: [HNOI2005]木梳 DP
1200: [HNOI2005]木梳 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 266 Solved: 125[Submit][Status] ...
- 1200: [HNOI2005]木梳 - BZOJ
Description Input 第一行为整数L,其中4<=L<=100000,且有50%的数据满足L<=104,表示木板下侧直线段的长.第二行为L个正整数A1,A2,…,AL ...
- 【BZOJ】【3530】【SDOI2014】数数
AC自动机/数位DP orz zyf 好题啊= =同时加深了我对AC自动机(这个应该可以叫Trie图了吧……出边补全!)和数位DP的理解……不过不能自己写出来还真是弱…… /************* ...
- 【BZOJ】【1391】【CEOI2008】order
网络流/最小割 暴力建图就好了……S->i 容量为收益,i->j+n 容量为租金,j+n->T容量为购买所花的钱. 如果亏钱的话那么割掉的就是收益,表示不赚钱. 如果租金大于购买所花 ...
- BZOJ 1391 [Ceoi2008]order
1391: [Ceoi2008]order Description 有N个工作,M种机器,每种机器你可以租或者买过来. 每个工作包括若干道工序,每道工序需要某种机器来完成,你可以通过购买或租用机器来完 ...
- 【BZOJ 1119】 1119: [POI2009]SLO (置换)
1119: [POI2009]SLO Description 对于一个1-N的排列(ai),每次你可以交换两个数ax与ay(x<>y),代价为W(ax)+W(ay) 若干次交换的代价为每次 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- bzoj 4026 dC Loves Number Theory 主席树+欧拉函数
题目描述 dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源.给定一个长度为 n的正整数序列A,有q次询问,每次询问一段区间内所有元素乘积的φ(φ(n)代 ...
- BZOJ 2127: happiness [最小割]
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ...
随机推荐
- jersey 过滤器
这里使用的Jersey 是 1.1 版本 1. web.xml 配置 <?xml version="1.0" encoding="UTF-8"?> ...
- 文件上传~Uploadify上传控件~续(多文件上传)
对于Uploadify文件上传之前已经讲过一次(文件上传~Uploadify上传控件),只不过没有涉及到多文件的上传,这回主要说一下多个文件的上传,首先,我们要清楚一个概念,多文件上传前端Upload ...
- UVALive3713-Astronauts(2-SAT)
题目链接 题意:有A.B.C3个任务分配给n个宇航员,当中每一个宇航员恰好分配一个任务.如果n个宇航员的平均年龄为x,仅仅有年龄大于x的才干领取A任务:仅仅有年龄严格小于x的才干领取B任务,而任务C没 ...
- 晨曦之光 linux Crontab 使用(转)
cron用法说明 cron的用法老是记不住,索性写下来备忘.下文内容大部分是根据<Cron Help Guide>翻译而来,有些部分是自己加上的. 全文如下: cron来源于希腊单词chr ...
- iOS-CALayer中position与anchorPoint详解
iOS-CALayer中position与anchorPoint详解 属性介绍 CALayer通过四个属性来确定大小和位置, 分别为:frame.bounds.position.anchorPoint ...
- 观察者模式在ng(Angular)中的应用
在这个前端框架满天飞的天下,angular MVVM 的模式确实火了一把,所以最近一直在学习ng,感悟颇多,填坑无数,今天终静下心来打算更新自己久未变动的博客,做一做总结. 1.在ng中的观察者模式: ...
- ArrayBlockingQueue 源码阅读 问题(一)
今天阅读java.util.concurrent 中 ArrayBlockingQueue 的源码,发现其中有很多下面这行代码 final ReentrantLock lock = this.lock ...
- STL的基本使用之关联容器:set和multiSet的基本使用
STL的基本使用之关联容器:set和multiSet的基本使用 简介 set 和 multiSet 内部都是使用红黑树来实现,会自动将元素进行排序.两者不同在于set 不允许重复,而multiSet ...
- sublime text插件
BracketHighlighter : 该插件提供配对标签,或大括号或字符引号的配对高亮显示,加强系统高亮 SublimeTmpl: 文件模版.安装后,文件---> New File (Sub ...
- ASP.NET MVC 第五回 ActionResult的其它返回值
我们上边所看到的Action都是return View();我们可以看作这个返回值用于解析一个aspx文件.而它的返回类型是ActionResult如 public ActionResult Inde ...