解题: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 }

浙公网安备 33010602011771号