zoukankan      html  css  js  c++  java
  • Uva 11491 暴力贪心

    题意:给一个n长度的整数,删掉 k 个数字,使得剩下的数字最大。

    分析:还剩 n-k 个数字,就是在原序列里面,相对顺序不变的情况下,这个n-k个数字组成的数最大。

    感觉没有什么特别好的方法策略,看了一下方案,策略是:

    不断的调整这n-k个数字,感觉这个时间复杂度受不了,哈哈~~~

    如何调整:当我确定的 K 个数字 + 还剩下的 n - i 个数字 > n - k ,那么这里就会有调整,调整到恰好 >= c 的位置处。

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int maxn = 1e5+5;
    char a[maxn];
    
    int main(int argc, char const *argv[])
    {
        int n,d;
        while(scanf("%d%d",&n,&d),n) {
            getchar();
    
            int k = 0;
    
            for(int i = 0; i < n; i++) {
                char c = getchar();
                while(k>0&&i-k<d&&a[k]<c)
                    k--;
                if(k+d<n) a[++k] = c;
            }
            a[++k] = '';
            puts(a+1);
        }
        return 0;
    }
  • 相关阅读:
    MongoDB高级操作
    MongoDB基本操作
    Python字符串
    Git标签和别名管理
    Git分支管理
    Git远程仓库(github
    Git分布式版本管理工具基本使用方法
    CentOS7防火墙
    CentOS7新特性
    Linux系统初始流程
  • 原文地址:https://www.cnblogs.com/TreeDream/p/7517958.html
Copyright © 2011-2022 走看看