解题:ZJOI 2006 皇帝的烦恼

 禁止DP,贪心真香

有一个比较明显的贪心思路是让每个人和距离为$2$(隔着一个人)的人尽量用一样的,这样只需要扫一遍然后对每对相邻的人之和取最大值即可。但是当人数为奇数时这样就会出锅,因为最后一个人和第一个人是“一套”的勋章(意会一下),解决方法是将答案再对这样的一个东西取$max$

$\left \lceil \frac{\sum\limits_{i=1}^n a_i}{\left \lfloor \frac{n}{2} \right \rfloor} \right \rceil$

 感性分析一下,因为如果最大值是因为第$n$个人和第$1$个人相邻而产生,那么就不应该用那个贪心思路,而是直接找合法方案。一种勋章最多能分给$\left \lfloor \frac{n}{2} \right \rfloor$个人,然后勋章又不能拆开,就有了上面那个式子

其实这只蒟蒻也不会严密的证明

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<cstdlib>
 4 #include<algorithm>
 5 using namespace std;
 6 long long num[20005];
 7 long long n,tot,ans;
 8 int main ()
 9 {
10     scanf("%lld",&n);
11     for(int i=1;i<=n;i++)
12         scanf("%lld",&num[i]),tot+=num[i];
13     for(int i=1;i<n;i++)
14         ans=max(ans,num[i]+num[i+1]);
15     if(n&1) ans=max(ans,(tot+n/2-1)/(n/2));
16     printf("%lld",ans);
17     return 0;
18 }
View Code

 

posted @ 2018-09-19 07:51  Speranza_Leaf  阅读(229)  评论(0)    收藏  举报