圆排列(heightround.pas/c/cpp)HGOI0607

圆排列 (heightround.pas/c/cpp) 题解题目描述:有 N 个人顺时针围在一圆桌上开会,他们对身高很敏感。 因此决定想使得任意相邻的两人的身高差距最大值最小。 如果答案不唯一,输出字典序最小的排列,指的是身高的排列。分析今日测试的第一题…如此简短的题目描述让人害怕。 一上手没有特别好的思路,于是想各种贪心策略。 一开始的想法是排成大小序号1,2,...
摘要由CSDN通过智能技术生成

圆排列 (heightround.pas/c/cpp) 题解

题目描述:

有 N 个人顺时针围在一圆桌上开会,他们对身高很敏感。 因此决定想使得任意相邻的两人的身高
差距最大值最小。 如果答案不唯一,输出字典序最小的排列,指的是身高的排列。

分析

  • 今日测试的第一题…如此简短的题目描述让人害怕。
    一上手没有特别好的思路,于是想各种贪心策略。
    一开始的想法是排成大小序号1,2,4,6,8 … 2k,2k+1,2k-1…7,5,3。
    后来不完全证明发现并非最优解。
  • 思考了十分钟,左倾错误判断告诉我数列开头从1到a,后面再一头一尾排完a+1到n。
  • 然后再枚举1到n-1作为有序序列开头,根据上述规则生成序列,再得出最优解
  • 于是9分……..
  • 订正时发现1 2开头的数列中差值最大值一定最优(不完全归纳???),应该有方法证明,以后再贴上来orz
  • 找到最优值之后再使用递增排序原序列。从左向右扫描,其中tail指针先指向第一个数,如果发现当前数减去tail指向数大于minn就将这个数从后向前放在最大值之后。不断更新就可以得出最优解emmm。
  • 100分到手!!!
  • 当然最优值也可以不用贪心,还可以有双线程DP求解。具体见excitedfrog的博客。

AC程序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值