博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
删数问题(贪心法经典问题)
阅读量:6564 次
发布时间:2019-06-24

本文共 815 字,大约阅读时间需要 2 分钟。

 

问题描述:用键盘输入一个高精度的正整数N,去掉其中S个数字后剩下的数字按原左右次序排列组成一个新的正整数。

     编程给定的N和S,寻找一个方案使得剩下的数字哦组成的新数最小。

 

思路解析: 使用逼近目标的贪心法来逐一逼近删除其中s个数符,每一步总数选择一个是剩下的数最小的数符删除。这样的贪心选择因为删除S个数符的全优解包含了删除一个

     数符的子问题的最优解。按从左到右寻找递减区间,删除第一个数字。若找不到递减区间 则删除末尾的数字。

 

1 void find_Min_Integer(vector
&nums,int S) 2 { 3 vector
result; 4 5 if(S>nums.size()) 6 { 7 nums.clear(); 8 return; 9 }10 //从左到右寻找递归序列11 12 while(S>0)13 {14 int i;15 for(i=0;(i
<=nums[i+1]);i++)16 ;17 nums.erase(i); //删除该区间的首字符 包括找不到递减区间时 删除末尾18 S--;19 }20 21 while(nums.size()>1&&nums[0]==0) //删除头部的无效数字022 nums.erase(0);23 }

 

贪心选择性质:可通过局部最优选择来达到全局最优解。

转载于:https://www.cnblogs.com/xiaoying1245970347/p/4630399.html

你可能感兴趣的文章
boost.asio包装类st_asio_wrapper开发教程(2014.5.23更新)(一)-----转
查看>>
[CLR via C#]5.3 值类型的装箱和拆箱
查看>>
c语言中的位移位操作
查看>>
趋势型指标——MACD
查看>>
object-c语言的nonatomic,assign,copy,retain的区别
查看>>
Ubuntu12.04版本安装arm-linux-gcc 4.3.3
查看>>
js 正则之检测素数
查看>>
linux-多线程
查看>>
中国版 Ubuntu Kylin 14.04 LTS 麒麟操作系统中文版发布下载 (Ubuntu天朝定制版)
查看>>
【BZOJ】1003: [ZJOI2006]物流运输trans(SPFA+DP)
查看>>
compass reset和layout [Sass和compass学习笔记]
查看>>
git push 不再需要重复输入账户密码的技巧
查看>>
(转)winform下TCP通信的简单应用
查看>>
获取预制和获取gameObject
查看>>
关于php配置文件
查看>>
JAVA必备——13个核心规范
查看>>
第37周五
查看>>
hdu-----(4514)湫湫系列故事——设计风景线(树形DP+并查集)
查看>>
android常见错误-Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE
查看>>
第40周二
查看>>