#3052. Partitioning for fun and profit

    ID: 3052 传统题 1000ms 256MiB 尝试: 0 已通过: 0 难度: (无) 上传者: 标签>动态规划Alberta Collegiate Programming Contest 2003.10.18

Partitioning for fun and profit

题目翻译

题目描述:

对于一个正整数 mm,将其划分为 nn 个元素(nmn \leq m)的分区定义为一个由正整数构成的序列 a1,a2,,ana_1, a_2, \ldots, a_n,满足以下条件:

  1. a1+a2++an=ma_1 + a_2 + \ldots + a_n = m
  2. a1a2ana_1 \leq a_2 \leq \ldots \leq a_n

你的任务是找到 mm 的一个划分为 nn 个元素的分区,使其在所有可能的分区按字典序排列时位于第 kk 个位置。

字典序的定义如下:
对于两个分区 a=[a1,a2,,an]a = [a_1, a_2, \ldots, a_n]b=[b1,b2,,bn]b = [b_1, b_2, \ldots, b_n],我们称 a<ba < b 当且仅当存在某个 1in1 \leq i \leq n,使得对于所有 j<ij < i,有 aj=bja_j = b_j,且 ai<bia_i < b_i。所有分区按字典序升序排列,最前面的分区是 [1,1,,1,mn+1][1, 1, \ldots, 1, m - n + 1]

输入格式:

  • 第一行输入一个整数 cc,表示测试用例的数量。
  • 接下来的 cc 行,每行包含三个整数:mm1m2201 \leq m \leq 220)、nn1n101 \leq n \leq 10)和 kkkk 不超过 mm 划分为 nn 个元素的分区总数)。

输出格式:
对于每个测试用例,输出第 kk 个分区,每个元素占一行。

输入样例 1:

2
9 4 3  
10 10 1

输出样例 1:

1
1
3
4
1
1
1
1
1
1
1
1
1
1