题目
描述
给定一个十进制正整数n(0 < n < 1000000000),每个数位上数字均不为0。n的位数为m。
现在从m位中删除k位(0<k < m),求生成的新整数最小为多少?
例如: n = 9128456, k = 2, 则生成的新整数最小为12456
输入
第一行t, 表示有t组数据;
接下来t行,每一行表示一组测试数据,每组测试数据包含两个数字n, k。
输出
t行,每行一个数字,表示从n中删除k位后得到的最小整数。
样例输入
2
9128456 2
1444 3
样例输出
12456
1
一、分析
9128456去除两个数后是最大数
先删9,结果128456是最大数。(每步都是最佳值)。发现:从左开始比下一个数大的可以删
再删8
1444 3
先删第一个4,再4,再4,都是删一个后的最大数。发现:相等后没有小的,就可以删。
自己数据444921 3
44421
4421
421
发现是要删9比2大,但是不能继续往后删2比1大,而是从头开始。
二、归纳
1.删第一个比下一个大的数,但是不能继续,下次从头开始
2.如果跟下一个数一样,找第一个不一样的
如果比下一个数大,删除自己
如果比下一个数下,没有动作,转换成1的问题
如果没有不一样的,删除自己
三、总结
贪心算法每一步都在算结果。动态规划每一步都在算状态,这个状态不一定是最后结果。
四、数据结构
容器,
clear清空
push_back()在队列后添加数据
pop_back()清除队列后数据
size()队列长度
用指针遍历元素vector::iterator x=v.begin();

本文介绍了如何通过贪心算法和动态规划思想解决给定一个十进制正整数n和要删除的位数k时,求生成的新整数最小值的问题。关键步骤包括删除较大数字和处理相等数字的情况,最后通过数据结构如队列实现。
最低0.47元/天 解锁文章
3889

被折叠的 条评论
为什么被折叠?



