1851: 【贪心】扇区填数
文件提交:无需freopen
内存限制:128 MB
时间限制:1.000 S
评测方式:普通裁判
命题人:
提交:0
解决:0
题目描述
有一个圆,当输入一个整数n(1≤n≤6)后,它被分成n个扇区,请你为每一扇区选择一个自然数(大于0的整数)。
向各个扇区放入数之后,你可以从单个扇区中选出—个数,也可以从相邻的两个或多个扇区中各选一个数,相加后形成一个新的数,请使用这些整数形成一个连续的整数序列,:1,2,3,…,i,你的任务是使i尽可能地大。
输入
只一个整数n(1<=n<=6)。
输出
第一行是最大的i,接下来的几行是所有能达到最大i的填法。
由于圆里不分顺序,所以同一种填法可以有多种输出。为了减少这种情况,这里规定从1,开始输出(因为连续数里要有1,所以所填的数中肯定有1)。
样例输入
1
样例输出
1
1
提示
假设圆已经被分成了n个扇区,并且已经在这n个扇区中填好了数字,先来看看填好数字后最多有多少种选择连续的数字并求和的方法,以N=4为例:
单独选一个,有n种即1、2、3、4;
选择相邻两个也有n种即12、23、34、41
选择相邻三个也有n种即123、234、341、412;
选择相邻四个只有一种即1234。
总共有n*(n-1)+1种,当n=4时有13种。
如果每一种选择所求的和都不同,那么能够构成的最多有n*(n-1)+1个不同的数。我们当然希望能够达到的最大的连续数就是从1到n*(n-1)+1了,如N=4时就是1到13。
现在的问题是如何保证这n*(n-1)+1个数就是从1到n*(n-1)+1。在填数时首先填1,接下来的n-1个数都保证不同且最小为2,再看其他的取相邻的多个数的情况了。在n<=6的情况下都能满足这个要求,对于n>6时就不一定了。
从这种最优策略出发,再结合回溯法找出所有可能的情况。