/**
[数学] hdu 4377
解题报告 from 人人HDOJ
其实这是个挺有趣的题,你需要构造一个 1..N 的排列,
使得其最长上升序列的长度和最长下降序列的长度的最大值最小。
应该比较容易能够想到这个答案是 sqrt(N) 级别的,
这个结论的证明可以参考吴文虎的那本组合数学 p21 。
当然这还没有结束,怎么找字典序最小的那个解呢?
先看看完全平方数吧,对于 4 ,我们有 2 1 4 3 ,对于 9 ,我们有 3 2 1 6 5 4 9 8 7 。
嗯,完全平方数的规律还是好找的,那么 5 呢?不就是加一个数么,1 3 2 5 4 ,如
果你觉得这是答案,那你就大错特错了,答案是 1 2 5 4 3 。
同样,对于 10 ,答案是 1 2 6 5 4 3 10 9 8 7 。
于是我们就可以构造程序,每次以 ceil(sqrt(N)) 为一组,
尽量把大的数安排到后面的组中,同时要注意,一定要分出 ceil(sqrt(N)) 组,
能让较小的 1 2 这样的数能够排在前面。
最后,这题并不难,但是做到 1Y 也不容易,
这就要克服各种逻辑上的问题,形成良好的思维习惯,对于解题来说也是十分重要的。
*/
#include <stdio.h>
#include <
[数学] hdu 4377
最新推荐文章于 2017-09-13 14:42:43 发布