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;
    }
  • 相关阅读:
    JAVA-类加载机制(2)-类加载的过程
    JAVA-类加载机制(1)-生命周期
    StarUML-详解
    JMS-mq-发布/订阅
    JMS-mq-点对点
    Spring-Transcation
    Session-Hibernate
    Session
    Git配置
    Maven配置
  • 原文地址:https://www.cnblogs.com/TreeDream/p/7517958.html
Copyright © 2011-2022 走看看