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

SGU 296.Sasha vs. Kate(贪心)

时间:2015-06-24 18:45:28      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:

题意:

  给出长度为n(<=1000)的一个数。输出删掉k个数字后的最大值。

 

Solution:

  简单贪心。

      s[i]代表数字s的第i位.

      从前往后第一个满足s[i]>s[i-1]的位置,最优一定是删除s[i-1]的.累计次数t.

      同时对新得到的数同样处理,这里可以只用一个循环.如果用c++ string的话更加方便.

  一直处理到t==k,或者没有满足条件的位置。  

  如果最后删除的次数t<k,只要从最后删掉k-t个数字。

      时间复杂度O(n)

技术分享
#include <iostream>
#include <string>
using namespace std;

string s;
int k,t;
int main()
{
    cin>>s>>k;
    for(int i=1;i<s.size()&&t<k;++i){
        while(s[i]>s[i-1]){
            s.erase(s.begin()+i-1);
            if(++t==k) break;
            if(--i==0) break;
        }
    }
    while(t<k){
        s.erase(s.end()-1);
        ++t;
    }
    cout<<s<<endl;
}
View Code

 

SGU 296.Sasha vs. Kate(贪心)

标签:

原文地址:http://www.cnblogs.com/keam37/p/4598206.html

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