Advertisement

贪心算法学习中遇到的问题

阅读量:

题目:

输入一个具有高精度的正整数n(位数不超过240位),

在删除任意s个数字后,剩余的数字按照原来的左右顺序组成一个新的正整数。

编程实现,针对给定的n和s,找到一种策略,使得最终得到的数值最小。

Simple Input

178543

4

Simple Output

13

首先:当N的位数超过200位时,必须使用字符串数组进行存储。字符串数组中隐含了'\0'作为结束符。当然,也可以通过strlen()函数直接获取字符串长度。

第二步是关于如何删除数字的问题。假设仅需删除一个数字。在每一步操作中,应始终选择一个能够使剩余数值最小的数字进行删除。具体来说,按从高位到低位的顺序进行搜索:如果各位数字呈现递增趋势,则应删除最后一个数字;否则应删除第一个递减区间的起始字符。通过这种方式删去一位后,将形成一个新的数字串。随后返回到字符串开头,并按照上述规则继续删除下一个数字 。如此循环操作s次即可完成全部删除过程。

还需要特别注意的是,在每次完成一次数字删除后,需要从数组的第一个元素开始重新判断是否满足条件。因此采用当型循环结构较为合适。一旦发现可以删除的位置,则立即终止当前判断流程。

本题虽然难度不高,但需要深入理解贪心算法的核心思想:从某个初始解出发逐步向目标靠近,在每一步都做出当前看来最优的选择,并不断缩小问题规模。最终由一系列局部最优决策组合成全局

全部评论 (0)

还没有任何评论哟~