码迷,mamicode.com
首页 > 其他好文 > 详细

删数问题(贪心法经典问题)

时间:2015-07-08 16:20:47      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

 

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

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

 

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

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

 

 1 void find_Min_Integer(vector<int> &nums,int S)
 2 {
 3     vector<int> 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.size())&&(nums[i]<=nums[i+1]);i++)
16             ;
17         nums.erase(i);  //删除该区间的首字符  包括找不到递减区间时 删除末尾
18         S--;
19      }
20 
21      while(nums.size()>1&&nums[0]==0)  //删除头部的无效数字0
22         nums.erase(0);
23 }

 

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

删数问题(贪心法经典问题)

标签:

原文地址:http://www.cnblogs.com/xiaoying1245970347/p/4630399.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!