• - > 贪心基础入门讲解一——完美字符串


    约翰认为字符串的完美度等于它里面所有字母的完美度之和。每个字母的完美度可以由你来分配,不同字母的完美度不同,分别对应一个1-26之间的整数。


    约翰不在乎字母大小写。(也就是说字母F和f)的完美度相同。给定一个字符串,输出它的最大可能的完美度。例如:dad,你可以将26分配给d,25分配给a,这样整个字符串完美度为77。

    分析: 由排序不等式,出现次数最多的字母显然应该给26。所以这个题目变成了统计每种字母出现的次数了,然后按照出现次数从大到小,依次分配从高到低的权值。这就是最朴素的贪心思想。
     
    输入

    输入一个字符串S(S的长度 <= 10000),S中没有除字母外的其他字符。
    输出
     
    由你将1-26分配给不同的字母,使得字符串S的完美度最大,输出这个完美度。
     
    输入示例

    dad

    输出示例

    77

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    char a[10100];
    int b[30],ans;
    int main()
    {
        cin>>a;
        for(int i=0;i<=strlen(a);i++)
        {
            if(a[i]=='a'||a[i]=='A')    b[1]++;    
            if(a[i]=='b'||a[i]=='B')    b[2]++;
            if(a[i]=='c'||a[i]=='C')    b[3]++;
            if(a[i]=='d'||a[i]=='D')    b[4]++;
            if(a[i]=='e'||a[i]=='E')    b[5]++;
            if(a[i]=='f'||a[i]=='F')    b[6]++;
            if(a[i]=='g'||a[i]=='G')    b[7]++;
            if(a[i]=='h'||a[i]=='H')    b[8]++;
            if(a[i]=='i'||a[i]=='I')    b[9]++;
            if(a[i]=='j'||a[i]=='J')    b[10]++;
            if(a[i]=='k'||a[i]=='K')    b[11]++;
            if(a[i]=='l'||a[i]=='L')    b[12]++;
            if(a[i]=='m'||a[i]=='M')    b[13]++;
            if(a[i]=='n'||a[i]=='N')    b[14]++;
            if(a[i]=='o'||a[i]=='O')    b[15]++;
            if(a[i]=='p'||a[i]=='P')    b[16]++;
            if(a[i]=='q'||a[i]=='Q')    b[17]++;
            if(a[i]=='r'||a[i]=='R')    b[18]++;
            if(a[i]=='s'||a[i]=='S')    b[19]++;
            if(a[i]=='t'||a[i]=='T')    b[20]++;
            if(a[i]=='u'||a[i]=='U')    b[21]++;
            if(a[i]=='v'||a[i]=='V')    b[22]++;
            if(a[i]=='w'||a[i]=='W')    b[23]++;
            if(a[i]=='x'||a[i]=='X')    b[24]++;
            if(a[i]=='y'||a[i]=='Y')    b[25]++;
            if(a[i]=='z'||a[i]=='Z')    b[26]++;
        }
        sort(b+1,b+27);
        int k=26,d=26;
        while(k){
            if(b[d]!=0){
                ans+=b[d]*k;
                k--;
                d--;
            }    
            else break;
        }
        cout<<ans;    
    }

       如果对你有所帮助,别忘了加好评哦;么么哒!!下次见!88

    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    【BZOJ3506】[CQOI2014] 排序机械臂(Splay)
    2019年1月训练记录(1.01~1.31)
    再学点分治——动态点分治
    【洛谷5113】Sabbat of the witch(毒瘤分块)
    【洛谷1501】[国家集训队] Tree II(LCT维护懒惰标记)
    初学后缀自动机
    【洛谷3950】部落冲突(LCT维护连通性)
    【BZOJ2049】[SDOI2008] Cave 洞穴勘测(LCT维护连通性)
    LCT入门
    【BZOJ4650】[NOI2016] 优秀的拆分(后缀数组)
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/6219016.html
Copyright © 2020-2023  润新知