|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
问题 D: 邮票
题目描述
信封上最多能够贴 k 张邮票,小明有面值不同的n张邮票, 并且每种邮票都有 k张之多。小明请你帮助求出最大的正整数 m,满足 1 到 m 的连续数面值都可以用不超过 k 张邮票表示出来。若无解,输出0。
例如有1元与3元的两种面值邮票,而信封上最多能贴3张邮票,那可以贴出 1,2,3,4,5,6,7 这七个连续面值。最大正整数m=7。
示例1:
输⼊: n=2 ; k=3;
1 3
输出: 7
解释: 输出最大正整数m为7。用1就能贴出1,2,3。
4=1+3; 5=1+1+3; 6=3+3; 7=3+3+1; 8就不行了。
示例2:
输⼊: n=4 ; k=10;
5 10 20 30
输出: 0
输入
输入共两行。第一行 n( n种不同面值的邮票)与 k (信封上最多贴 k张邮票) 。第二行为 n张邮票的面值,用空格分隔。
输出
输出能贴出连续面值的最大正整数 m。
样例输入
3 10
1 2 5
样例输出
47
提示:
1≤k≤200,1≤n≤100,
1≤邮票面值≤1000
本帖最后由 tommyyu 于 2024-7-26 16:04 编辑
有了一个大概思路,但不确定会不会超时,不过超时了到时候优化优化应该也能过。
- 先求出来邮票所能组合出来的最大面值,再从 1 开始一步步遍历到最大面值,看其中的每一个面值能否凑出来。具体方法是:开一个数组(记为a),记录每一种面值所需要的最小邮票数。
- 当面值 = 0时,a[0] = 0;
- 当面值 != 0时,a[i] = min(a[i-第一种邮票的面值] , a[i-第二种邮票的面值] , ... , a[i-第n种邮票的面值]) + 1
- 若 a[i] > k,则输出 i-1 。
复制代码
|
|