删数问题--贪心算法+string类的一些应用

来源:互联网 发布:人工智能加医疗概念股 编辑:程序博客网 时间:2024/06/06 14:29

先上题目:

Description

你有一个长度为n的数字串, 现在要求你删除其中k个数字, 使得剩下的数字在不改变原有顺序的情况下,组成的数字最大.

Input

每组数据包含一个数字串(1 <= n <= 1000),和一个整数k (0 <= k < n).

Output

对于每组数据, 输出你的答案.

Sample Input

1452 233 0

Sample Output

5233


思路是这样的,每次从左开始比较,如果全是递减的话,就删除最后一位,如果出现非递减的数,就删除第一次出现递增的那个数。

代码:

#include <iostream>#include <string>using namespace std;int main(){    string str;    int n;    string::size_type i;    while(cin >> str >> n)    {        while(n)        {            for(i = 0; i != str.size() - 1 && str[i] >= str[i + 1]; i++);            str.erase(i, 1);            n--;        }        cout << str << endl;    }    return 0;}

size_type其实是string模板类定义的一种类型之一,它与size_of的用法相似,只是它根据存储的类型返回字符串的长度.对于 string具体化,将根据char返回字符串的长度,在这种情况下,size_type与size_of等效.size_of是一种无符号类型.

size_type是在string类内定义的一个无符号整形类型,由于string类里很多方法的返回值都是size_type类型的,所以必须使用size_type进行类型声明。

erase(pos, 1)意思从pos位置删除第一个字符

1 0