SGU 296.Sasha vs. Kate(贪心)
题意:
给出长度为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; }