链接:https://www.nowcoder.com/questionTerminal/061d419c7cea4c658ee0484654b11c3e?f=discussion
来源:牛客网
多多鸡打算造一本自己的电子字典,里面的所有单词都只由a和b组成。
每个单词的组成里a的数量不能超过N个且b的数量不能超过M个。
多多鸡的幸运数字是K,它打算把所有满足条件的单词里的字典序第K小的单词找出来,作为字典的封面。
输入描述:
1 | 共一行,三个整数N, M, K。(0 < N, M < 50, 0 < K < 1,000,000,000,000,000) |
输出描述:
1 | 共一行,为字典序第K小的单词。 |
示例1
输入
1 | 2 1 4 |
输出
1 | ab |
说明
1 | 满足条件的单词里,按照字典序从小到大排列的结果是 |
备注:
1 | 对于40%的数据:0 < K < 100,000 |
链接:https://www.nowcoder.com/questionTerminal/061d419c7cea4c658ee0484654b11c3e?f=discussion
来源:牛客网
dp[n][m]
表示n
个a
,m
个b
的单词数量
dp[n][m] = 1 + dp[n-1][m] + 1 + dp[n][m-1]
根据K
倒推,是前半部分,还是后半部分,来确定第一个字母是a
,还是b
注意dp[n][m]
可能超过long
类型的范围,所以,用BigInteger
来存dp
1 | import java.util.*; |