zoukankan      html  css  js  c++  java
  • HDU 3183 贪心

    给出一个数n 再给一个数m 问 在n中拿掉m个数 n最小多少

    n用字符串来存 最多1000位

    思想是 最后会留下n-m位 所以从后往前看 从n-m+1位往前看 取最小的一个值 让它做第一位

    然后将这个值的位子标记 以后只看到标记的位子就break

    这样可以保证第一位是可以选的最小的 由于第一位在让n变小的重要性大于第二位及以后 所以后面的都要迁就前面的 故遇到标记 即已经到了前一位的地方 就break出来

    需要注意的是当某一位选择最小值的时候 应该尽量往前面选 即使值一样小 这样可以给后面的开辟空间

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<map>
    #include<math.h>
    #include<queue>
    using namespace std;
    char s[1005];
    int n,m;
    char ans[1005];
    bool ok[1005];
    int main(){
    while(~scanf("%s",s))
    {
        int len=strlen(s);
        int xiabiao=len-1;
        scanf("%d",&n);
        m=len-n;
        m=(xiabiao-m+1);
        int w=0;
        memset(ok,true,sizeof(ok));
        for(int i=m;i<=len-1;i++)
        {
            char minn=s[i];
            int where=i;
            for(int k=i;k>=0;k--)
            {
                if(ok[k]==false)
                    break;
                if(s[k]<=minn)
                {
                    minn=s[k];
                    where=k;
                }
            }
    
            ok[where]=false;
            ans[w++]=minn;
        }
        bool qiandao=true;
        for(int i=0;i<w;i++)
        {
            if(ans[i]!='0')
                qiandao=false;
            if(!qiandao)
                printf("%c",ans[i]);
        }
        if(qiandao==true)
            printf("0");
        printf("
    ");
    }
    }
    

      

  • 相关阅读:
    Spring--之旅
    体验 Windows 系统 CVM
    基于 CentOS 搭建 WordPress 个人博客
    Codeforces Round #316 (Div. 2)
    BZOJ 1048 [HAOI2007]分割矩阵
    BZOJ 1047 [HAOI2007]理想的正方形
    BZOJ 1045 [HAOI2008] 糖果传递
    BZOJ 1042 [HAOI2008]硬币购物
    BZOJ 1030 [JSOI2007]文本生成器
    BZOJ 第二波刷题开始喽
  • 原文地址:https://www.cnblogs.com/rayrayrainrain/p/5271909.html
Copyright © 2011-2022 走看看