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;
}

时间: 2024-08-25 00:38:14

SGU 296.Sasha vs. Kate(贪心)的相关文章

SGU 410 Galaxy in danger --贪心,想法题

题意:有n个星球,每个星球有Ai个人,每次有两种选择,第一是从每个星球上去掉1个人,第二个选择是选择一个星球放置一个科学家,将该星球的人数加倍,问最少多少次能够将所有星球上的人数同时变为0,并且如果步数<=1000,还要输出操作顺序. 解法:找出人数最多的那个星球,设最大人数为maxi,那么跑一个循环,每次该星球如果人数<maxi,那么能加倍就加倍到离maxi最近的位置,然后计算他们的差,比如2 1035,加倍后为1024 1035,差为11,那么到时候1024减到11的时候,1035变成了2

codeforce447 D SGU 548 贪心+优先队列

codeforce447 D - DZY Loves Modification 题意:有一个n*m的矩阵,每次可以选择一行或者一列,可以得到这行或这列的所有元素sum的积分,然后使这一列/行的每一个元素都减少p,接着再选择一行或一列,共操作k次,n,m<=1000,k<=1000000求最多能得到多少积分 思路:每次选择sum最大的行或者列,但是时间复杂度太大,过不去~若选择一行,则每个列的sum一定减少p,同理:若选择的行数和列数确定下来了,选择i行,k-i列,那么行和列之间谁选选择就没有影

sgu 321 The Spy Network (dfs+贪心)

321. The Spy Network Time limit per test: 0.5 second(s)Memory limit: 65536 kilobytes input: standardoutput: standard The network of spies consists of N intelligence officers. They are numbered with the code numbers from 1 to N so that nobody could di

SGU 275 To xor or not to xor (高斯消元)

题目地址:SGU 275 首先,贪心的思想,每一二进制位上要尽量是1,而能不能是1用高斯消元来解决.当该位有一个可以使之为1的变元时,就说明这位可以为1,而且令该变元控制该位,然后向低位消元. 代码如下: #include <iostream> #include <string.h> #include <math.h> #include <queue> #include <algorithm> #include <stdlib.h>

作业三 贪心算法

记录点滴. 1 /* 2 2015.6 HT 3 ACM Work_3 4 5 */ 6 7 //#include<stdio.h> 8 #include <iostream> 9 #include<algorithm> 10 using namespace std; 11 12 13 /* 14 FatMouse' Trade 15 老鼠有M磅猫食,可用F[i]的猫食换J[i]食物 16 */ 17 //struct bb 18 //{ 19 // double ge

公交调度-车次链编制贪心算法

---恢复内容开始--- 1 package cn.edu.karel.work.public_transit_problem; 2 3 import java.io.File; 4 import java.io.FileNotFoundException; 5 import java.io.FileReader; 6 import java.io.IOException; 7 import java.util.ArrayList; 8 import java.util.List; 9 10 /

SGU 116

简单DP,可以理解为背包问题的变式.(想当初苯渣会错题意,以为只要输出任意一组解啊!结果一趟DFS在第14个点上WA三次啊!TUT) (第14个点上WA的一定是用贪心或一趟DFS做的!) 首先找到10000以内的super_prime,共201个.(不是打表- -) 这部分代码可以在行到行找到. 然后DP:f[i]代表用最少SUPER_PRIME构成i的数目,prev[i]保存序列. f[i]=f[i-super[j]]+1(如果super[j]<=i,1<=j<=201) #inclu

poj 1017 Packets 裸贪心

Packets Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 43189   Accepted: 14550 Description A factory produces products packed in square packets of the same height h and of the sizes 1*1, 2*2, 3*3, 4*4, 5*5, 6*6. These products are alway

今日SGU 5.14

//SGU 131 还没完全想清楚 留坑 SGU 259 题意:一个机器处理n个任务,每个任务有时间t和传送时间l 收获:贪心 #include<bits/stdc++.h> #define de(x) cout<<#x<<"="<<x<<endl; #define dd(x) cout<<#x<<"="<<x<<" "; #define