zoukankan      html  css  js  c++  java
  • UVa 11491 Erasing and Winning

    题意:给出一个n位的整数,要求删除其中的d个数字,使得剩下的部分最大化。

    有简单的做法,我们可以注意到,高位对一个数字的是有绝对的影响力的,所以我们需要保证高位足够大,我们可以这样贪心求解,我们对这n个数字从前往后考虑:

    若后一个数字比前一个数字大,则前面这个数字肯定需要删除,并且删除之后我们还得和新的前一个数字比较,如果仍然是后一个数字大我们还得将这个新的前一个数字删除并继续这样比较下去,直到比较到最前面或者前一个数字大于等于后一个数字。

    若后一个数字小于等于前一个数字,我们就继续往下比较。

    按照这种规则,当我们删除d个数字之后就可以直接得出最后的结果。

    代码就可以写的很简短:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 const int maxn = 100000;
     5 char str[maxn];
     6 
     7 int main(){
     8 #ifdef TEST
     9     freopen("out.txt", "w", stdout);
    10     freopen("in.txt", "r", stdin);
    11 #endif // TEST
    12     int n, d;
    13     while(scanf("%d%d", &n, &d) == 2 && n){
    14         getchar();
    15         char ch;
    16         int cnt = 0, td = d;
    17         while((ch=getchar())!='
    '){
    18             if(cnt == 0 || td == 0) str[cnt++] = ch;
    19             else {
    20                 int t = cnt - 1;
    21                 while(t >= 0 && td > 0 && ch > str[t]) {
    22                     t--;
    23                     td--;
    24                 }
    25                 str[t+1] = ch;
    26                 cnt = t+2;
    27             }
    28         }
    29         str[n-d] = '';
    30         puts(str);
    31     }
    32     return 0;
    33 }
    View Code
  • 相关阅读:
    websocket 学习笔记
    oxy 学习笔记
    postcss
    一致性hash和chord
    leveldb 学习笔记
    logrus 学习笔记
    viper 学习笔记
    redigo 学习笔记
    gin 学习笔记
    修改TOMCAT的JVM虚拟机内存大小几种方式
  • 原文地址:https://www.cnblogs.com/DynastySun/p/9349026.html
Copyright © 2011-2022 走看看