题目描述

经过多年的杀戮,秦皇终于统一了中国。为了抵御外来的侵略,他准备在国土边境安置n名将军。不幸的是这n名将军羽翼渐丰,开始展露他们的狼子野心了。他们拒绝述职、拒绝接受皇帝的圣旨。

秦皇已经准备好了秘密处决这些无礼的边防大将。

不过为防兵变,他决定先授予这些将军一些勋章,为自己赢得战略时间。将军们听说他们即将被授予勋章都很开心,他们纷纷上书表示感谢。第i个将军要求得到ai枚不同颜色的勋章。但是这些将军都很傲气,如果两个相邻的将军拥有颜色相同的勋章他们就会认为皇帝不尊重他们,会立即造反(编号为i的将军和编号为i+1的将军相邻;因为他们驻扎的边境可以类似看成一个圆形,所以编号1和编号n的将军也相邻)。

皇帝不得不满足每个将军的要求,但对他们的飞扬跋扈感到很气愤。于是皇帝决定铸造尽量少种类的勋章来满足这些狂妄者的要求。请问他至少要铸造多少种颜色的勋章?

输入格式

第一行有一个整数n(1<=n<=20000)。

接下来n行每行一个整数ai,表示第i个将军要求得到多少种勋章。(1<=ai<=100000)

输出格式

输出一个整数,即最少需要多少种勋章。

输入输出样例

输入 #1复制

4
2 2 1 1
输出 #1复制
    4

一句话题意:

  • 有N个将军,每人想要一定量的勋章,他们排成一个环,每个人和他相邻的两个人有的勋章都不能一样,问总共要造多少个勋章

考试时没时间时骗分的方法

  • 这题第一眼会产生两种方法:一个事二分加乱搞,另一个就是贪心+撞运气,在完全没有思路或者没时间的时候第二种方法加一个对拍就是一个好的方法;
  • 这题感觉考试时不少人都在贪,廖半仙和ZWJDD不知道咋搞的炸了,可为啥我的贪心没有脑子,还有55分???
  • 感觉凭感觉会觉得答案就是A[i]+A[i+1]的最大值,至于为什么证明后面会有。
  • 然后交上去,也确实啥也没判,也没分奇偶,还有分,还怪多。。。

考试时在时间很多/第三题一点也不会时(就像这次)搞的正解

  • 正解感觉也很神奇,对于考试时是怎么想到的,我也不知道,感觉什么都不能用,那就DP吧。。。
  • 先举几个栗子:

                   

样例:巨水,偶数个,很简单可得有四个                              5个人,没人都要一个,可得要三个                     三个人,每人要一个,共要3个

  • 一个大胆的想法偶数时,很简单,自己和相邻的一个人取一个最大值,因为是偶数个,可以将奇数分为一组,偶数分为一组,让他们没有勋章是一样的,很容易可以想到。
  • 在看后面两个奇数时,发现没有什么明显的规律,那就很明显的发现,这题难就难在奇数,任何奇数都可以拆成2*N+1的形式,那最后的那个1怎么办?

奇数时判断的方法(重点):

  • 重点就在于怎么判断最后一个和第一个(废话。。。)
  • 这题贪心果断排除,什么其他高级算法也想不到,那就写DP吧。。。感觉除了长得清奇一点还是很好想的。
  • maxn【i】:表示在前(i-1)个均不冲突时,第i个点与第1个点冲突的最大值
  • mx【i】:表示在前(i-1)个均不冲突时,第i个点与第1个点冲突的最小值
  • 方程式1:maxn【i】=min ( a [ i ]  , a [ 1 ]  -  mx [  i-1  ]  )
  • 解释:要使  i  和  1  的冲突最大,而且还不能让  i  和  i-1  的冲突太大,那就表明  i-1  和  1  的冲突要尽可能的小,而  A[1]  中除去   mx[i-1]   之后,剩下的所有元素都合适,故得证。
  • 方程式2:mx[  i  ]=max (  0  ,   a  [  i  ]  --  (  x  -  a  [  i  -  1  ]  -  a  [  1  ]  +  maxn  [  i-1  ]));
  • 解释:要想使冲突最小,那就意味着除去不得不冲突的,其他一定不冲突。。。设总共有X种不同的勋章(这个事二分出来的) ,a  [  i  ]  --  (  x  -  a  [  i  -  1  ]  -  a  [  1  ]  +  maxn  [  i-1  ]  )表示在X种中除去必须和  1  还有  i-1  冲突的,由于可能有重复,所以还要加上maxn  [  i-1  ]  (此时可令  1 和  i-1的冲突很大,这样可以保证剩下来的最多。)如果剩下的额不足 A[ i ]  则表示一定会冲突。
  • 判断:最后判断一下mx【N】是否为0,如果为0就意味着当前的X是成立的。
  • 最后就是代码
  • 对于为什么二分要从最大值开始,是因为MX和MAXN都是在满足与前面不冲突的情况下设立的,可以这样理解,任意一个奇数都可以拆成一个偶数+1,我们必须在满足那个偶数的情况下去处理奇数,也就意味着答案一定比那个偶数成立的还要大,一旦比他小,偶数前面的偶数就已经不满足了,也就一定不会满足这个奇数

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath> using namespace std; const int maxn1=; int n,m,a[maxn1],sum,maxn[maxn1],mx[maxn1];
bool pd(int x)
{
maxn[]=mx[]=a[];
for (int i=;i<=n;i++)
{
maxn[i]=min(a[]-mx[i-],a[i]);
mx[i]=max(,a[i]-(x-a[i-]-a[]+maxn[i-]));
}
if (!mx[n])
{
return true;
}
else
{
return false;
}
}
int main()
{
ios::sync_with_stdio(false);
cin>>n;
for (int i=;i<=n;i++)
{
cin>>a[i];
sum+=a[i];
}
int l=a[]+a[];
int r=sum;
int ans=sum;
for (int i=;i<=n-;i++)
{
l=max(l,a[i]+a[i+]);
}
l=max(l,a[]+a[n]);
while(l<=r)
{
int mid=(l+r)>>;
if (pd(mid))
{
ans=min(ans,mid);
r=mid-;
}
else
{
l=mid+;
}
}
cout<<ans<<endl;
}

最后的最后这题有一个什么乱搞的方法,可以去这位大佬的博客里看看(传送门

反正这句话我看的是真的爽。。。

最后日常水一下,BK201果然还是太神了。。。ZWJdd果然还是太巨了。。。SHYMM还是太牛了。。。。阿基米德的的那啥盆还是太神奇了。。。。。

最后还有其他没水到的大佬,如果有下次讲题的机会一定水到。

NOIP模拟赛18 皇帝的烦恼O(∩_∩)O 二分+DP的更多相关文章

  1. 【noip模拟赛6】收入计划 最大值的最小值 二分答案

    描述 高考结束后,同学们大都找到了一份临时工作,渴望挣得一些零用钱.从今天起,Matrix67将连续工作N天(1<=N<=100 000).每一天末他可以领取当天及前面若干天里没有领取的工 ...

  2. 【2019.7.20 NOIP模拟赛 T2】B(B)(数位DP)

    数位\(DP\) 首先考虑二进制数\(G(i)\)的一些性质: \(G(i)\)不可能有连续两位第\(x\)位和第\(x+1\)位都是\(1\).因为这样就可以进位到第\(x+2\)位.其余情况下,这 ...

  3. CH Round #48 - Streaming #3 (NOIP模拟赛Day1)

    A.数三角形 题目:http://www.contesthunter.org/contest/CH%20Round%20%2348%20-%20Streaming%20%233%20(NOIP模拟赛D ...

  4. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  5. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  6. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  7. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  8. 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...

  9. 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...

随机推荐

  1. Tomcat源码分析二:先看看Tomcat的整体架构

    Tomcat源码分析二:先看看Tomcat的整体架构 Tomcat架构图 我们先来看一张比较经典的Tomcat架构图: 从这张图中,我们可以看出Tomcat中含有Server.Service.Conn ...

  2. 报错fatal: refusing to merge unrelated histories

    提交到远程仓库的时候报错如下 是因为远程仓库有东西更新,但本地仓库没有更新造成提交失败 需要先把远程仓库给拉取下来,执行命令git pull origin master,又报错了如下 是因为两个仓库提 ...

  3. 在Xamarin开发中,UWP环境下无法进入断点调试standard库的问题解决方案

    环境如下 选择的代码共享方案为standard模式 再多平台依赖注入的时候,断点一直提示没有加载文档. 进入到目标平台项目Debug文件夹下,查看.发现standard库引用进来后,对应的*.pdb文 ...

  4. webstrom 永久激活方法 ,长期可用

    打开hosts文件:C:\Windows\System32\drivers\etc 在最后一行添加 0.0.0.0 account.jetbrains.com 打开webstorm,选择Activat ...

  5. javascript 对象和字符串互转

    Object  =>  String : console.log(JSON.stringify(e)); String => Object : JSON.parse(str)

  6. [BZOJ5280] [Usaco2018 Open]Milking Order

    Description Farmer John的N头奶牛(1≤N≤105),仍然编号为1…N,正好闲得发慌.因此,她们发展了一个与Farmer John每 天早上为她们挤牛奶的时候的排队顺序相关的复杂 ...

  7. std::tuple

    tuple,元组类型.头文件<tuple>,tuple是一个固定大小的不同类型(异质,heterogeneous)值的集合(这一点是tuple与其他常规STL容器的最大不同,即它可以同时存 ...

  8. 点击任何位置隐藏所需隐藏的元素 (无BUG/jQuery版)

    1>第一种分两步 1) :对document的click事件绑定事件处理程序,使其隐藏该div 2) :对div的click事件绑定事件处理程序,阻止事件冒泡,防止其冒泡到document,而调 ...

  9. i春秋DMZ大型靶场实验(一)内网拓展

    更具提示 先下载工具包 ip  172.16.12.226  打开bp 进行代理发现 整个页面 没有请求 没有其页面通过 御剑,dir ,hscan   进行目录爆破未发现有用信息    对当前页面进 ...

  10. 如何利用C# Roslyn编译器写一个简单的代码提示/错误检查?

    OK, 废话不多说,这些天在写C#代码时突然对于IDE提示有了一些想法,之前也有了解过,不过并没有深入. 先看个截图: 一段再简单不过的代码了,大家注意看到 count 字段下面的绿色波浪线了吗,我们 ...