JZOJ1261. 数字游戏 (2017.8B组)

来源:互联网 发布:公务员难考吗 知乎 编辑:程序博客网 时间:2024/06/18 07:37

Description

Charles和sunny在玩一个简单的游戏。若给出1~n的一个排列A,则将A1、A2相加,A2、A3相加……An-1、An相加,则得到一组n-1个元素的数列B;再将B1、B2相加,B2、B3相加,Bn-2、Bn-1相加,则得到一组n-2个元素的数列……如此往复,最终会得出一个数T。而Charles和sunny玩的游戏便是,Charles给出n和T,sunny在尽可能短的时间内,找到能通过上述操作得到T且字典序最小的1~n的排列。(sunny大声说:“What an easy game!”,接着几下就给出了解),Charles觉得没意思,就想和你玩,当然,你可以用一种叫做“电子计算机”的东西帮你。

Input

本题有多组数据,对于每组数据:一行两个整数n(0< n<=20),t即最后求出来的数。两个0表示输入结束。

Output

对于每组测试数据输出一行n个整数,用空格分开,行尾无多余空格,表示求出来的满足要求的1~n的一个排列。

Sample Input

4 16
3 9
0 0

Sample Output

3 1 2 4
1 3 2

Data Constraint

Hint

【样例说明】
开始排列: 3 1 2 4
第一次操作:3+1=4 1+2=3 2+4=6
得到: 4 3 6
第二次得到: 7 9
最后就是: 16
【注释】
数据保证有解。
对于30%的数据,保证该组里的每个N都不超过10。
对于100%的数据,保证有每个N不超过20,且每组数据的个数不超过10。
想法:
有n个数时,每个数的系数是杨辉三角第n行第j个
dfs,全排列一遍,会超时,dg(t,s),到第t位,前t个贡献为s
剪枝:
1:s》m(和),返回
2:对于第t位,如果放i,设x为m-s-i*f[n][t]的值是在后面t+1~n位答案的min~max之间,则可以选i,min就是用剩下的数和系数,小数乘大系数,大数乘小系数,max同理
3:如果t>n/2(上取整),a[t]

原创粉丝点击