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 ...
随机推荐
- leetcode题解||Reverse Integer 问题
problem: Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 ...
- Swift语言入门之旅
Swift语言入门之旅 学习一门新的计算机语言,传统来说都是从编写一个在屏幕上打印"Hello world"的程序開始的.那在 Swift,我们使用一句话来实现它: printl ...
- 一个备份MySQL数据库的简单Shell脚本(转)
Shell脚本是我们写不同类型命令的一种脚本,这些命令在这一个文件中就可以执行.我们也可以逐一敲入命令手动执行.如果我们要使用shell脚本就必须在一开始把这些命令写到一个文本文件中,以后就可以随意反 ...
- android 28 SimpleAdapter
监听器返回fasle,则事件还会分发给其他监听器. SimpleAdapter是BaseAdapter的子类,对适配器进行了简化,数据的格式是List,List的元素必须是Map, public Si ...
- mysql内核源代码深度解析 缓冲池 buffer pool 整体概述
http://blog.csdn.net/cjcl99/article/details/51063078
- 原创翻译:iOS 应用程序 蓝牙后台运行
默认情况下,普通的CoreBluetooth 任务中的大多数,无论是Central还是peripheral ,在后台或者挂起状况下都是无法进行的.也就是说,你可以通过宣布你的应用程序支持后台处理模式来 ...
- day01-day04总结- Python 数据类型及其用法
Python 数据类型及其用法: 本文总结一下Python中用到的各种数据类型,以及如何使用可以使得我们的代码变得简洁. 基本结构 我们首先要看的是几乎任何语言都具有的数据类型,包括字符串.整型.浮点 ...
- 一次项目中用到的php函数总结
最近做的一个项目,我把做的过程中用到的php函数总结一下.以后遇到类似的不用百度,直接看自己总结的就好了.都是一些简单基础的函数,随手记下.方便以后学习. 1.array_sum() 返回数组中的所有 ...
- Java-Hirbernate小结大纲
Hibernate Hibernate是一个开放源代码的对象关系映射框架 Hibernate的核心接口一共有6个,分别为:Session.SessionFactory.Transaction.Quer ...
- Adding Validation to our Album Forms 添加类属性的一些验证特性
Adding Validation to our Album Forms We’ll use the following Data Annotation attributes: Required – ...