题目描述 Description
给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤40)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1~MAX之间的每一个邮资值都能得到。
例如,N=3,K=2,如果面值分别为1分、4分,则在1分~6分之间的每一个邮资值都能得到(当然还有8分、9分和12分);如果面值分别为1分、3分,则在1分~7分之间的每一个邮资值都能得到。可以验证当N=3,K=2时,7分就是可以得到的连续的邮资最大值,所以MAX=7,面值分别为1分、3分。
输入描述 Input Description
N和K
输出描述 Output Description
每种邮票的面值,连续最大能到的面值数。数据保证答案唯一。
样例输入 Sample Input
3 2
样例输出 Sample Output
1 3
MAX=7
思路
虽然深搜,但是邮票面值的上界在深搜中不好确定,只知道下界,怎么办呢?用DP解决深搜的上界,和当前邮票可以取到的连续最大值
DFS:
对每一步,枚举邮票面值,然后搜索下一张邮票面值并更新最优解。
DP
背包确定搜索范围。
假设现在枚举到第 i 张邮票面值,第 i-1 张邮票面值为a[i-1],前 i-1 张邮票得到的最大连续值为x,则第 i 张邮票面值的范围就为
[a[i-1]+1,x+1];
假设现在有 n 张邮票,怎么得到其最大连续值呢?
用 f[i] 记录达到数值 i 所需的最小邮票