zoukankan      html  css  js  c++  java
  • - > 贪心基础入门讲解一——完美字符串

    约翰认为字符串的完美度等于它里面所有字母的完美度之和。每个字母的完美度可以由你来分配,不同字母的完美度不同,分别对应一个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

    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    RESTful API 介绍,设计
    golang web框架设计7:整合框架
    golang web框架设计6:上下文设计
    golang web框架设计5:配置设计
    golang web框架设计4:日志设计
    golang web框架设计3:controller设计
    golang web框架设计2:自定义路由
    golang web框架设计1:框架规划
    深入理解golang: channels
    服务端高并发分布式十四次架构演进之路
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/6219016.html
Copyright © 2011-2022 走看看