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

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

时间: 2024-12-14 18:47:02

贪心基础入门讲解一——完美字符串的相关文章

贪心基础入门讲解五——任务执行顺序

分析: 本题可以抽象成,从一个整数开始,每次减去a,再加上b (a,b都是正数),要求每次操作都不产生负数. 针对本题a[i] = R[i], b[i] = R[i] – O[i],注意O[i] < R[i],我们有0<b[i]<a[i]. 所以尽管每次有减有加,但是加的没有减的多,总数还是在不断见效的.关键我们是要“最有利”的一种执行顺序.大家可以尝试多种贪心策略. 我们给出标准答案——按照b[i]不增的顺序排序,是最“有利”的. 为了定义“有利”,我们这样证明我们的结论: 如果对于b

贪心基础入门讲解二——活动安排问题

有若干个活动,第i个开始时间和结束时间是[Si,fi),只有一个教室,活动之间不能交叠,求最多安排多少个活动? 分析: 我们就是想提高教室地利用率,尽可能多地安排活动.考虑容易想到的几种贪心策略: (1) 开始最早的活动优先,目标是想尽早结束活动,让出教室.然而, 这个显然不行,因为最早的活动可能很长,影响我们进行后面的活动.例如活动开始和结束时间分别为[0, 100), [1,2) ,[2, 3), [3, 4),[4,5],安排[0,100)的这个活动之后,其他活动无法安排,可是最优解是安排

贪心基础入门讲解三——活动安排问题二

有若干个活动,第i个开始时间和结束时间是[Si,fi),活动之间不能交叠,要把活动都安排完,至少需要几个教室? 分析:能否按照之一问题的解法,每个教室安排尽可能多的活动,即按结束时间排序,再贪心选择不冲突的活动,安排一个教室之后,剩余的活动再分配一个教室,继续贪心选择…… 反例: A:[1,2)  B:[1,4) C:[5,6) D:[3,7) 已经按结束时间排好顺序,我们会选择教室1: A C教室2:  B教室3:  D需要3个教室.但是如果换一种安排方法,我们可以安排AD在一个教室,而BC在

贪心基础入门讲解四——独木舟问题

n个人,已知每个人体重,独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人.显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟? 分析: 一个显然的策略是按照人的体重排序. 极端化贪心策略,最重的人要上船——如果最重的人和最轻的人体重总和不超过船的承重,则他们两个占用一条船.否则(因为假设最重的人的体重也不超过船的承重了),最重的人单独占一条船.转变为(n – 1)或者(n – 2)的问题了. 关键在于这种贪心策略是正确的.我们可以证明,最优解也可

《AWK 基础入门讲解实战视频课程》笔记

[awk作用] 默认逐行处理文本或者命令输出(如果保存到文件,本质上也是文本),用来处理命令输出时很有用. 更准确地讲是适合处理表格式的文本的. {cmd}花括号每执行一次就把结果打印一行在终端上. 行:record 列:field ? ? [awk课程简介] 理论不说了,直接实验上截图吧. AWK来源不说了,百度百科吧. AWK版本不说了. awk命令的位置: 老师写了个播放音乐的脚本,先下载mplayer ping www.baidu.com sudo apt-get update sudo

JavaWeb基础入门讲解

课程目标清楚掌握MVC开发模式,使用jsp+servlet完成模块开发适用人群具备java基础课程简介简 介 课程包含以下知识点:1.JSP基础与九种内置对象2.结合九种内置对象实现一个基础的图书管理模块CRUD功能3.JSP标签4.Servlet与标准MVC开发(过滤器.监听器等)5.JSTL的使用6.使用标准MVC设计模式完成一个小案例 原文地址:https://blog.51cto.com/11928539/2396555

[零基础学python]玩转字符串(2)

上一章中已经讲到连接两个字符串的一种方法.复习一下: >>> a= 'py' >>> b= 'thon' >>> a+b 'python' 既然这是一种方法,言外之意,还有另外一种方法. 连接字符串的方法2 在说方法2之前,先说明一下什么是占位符,此前在讲解变量(参数)的时候,提到了占位符,这里对占位符做一个比较严格的定义: 来自百度百科的定义: 顾名思义,占位符就是先占住一个固定的位置,等着你再往里面添加内容的符号. 根据这个定义,在python里面

Android基础入门教程——10.14 Android GPS初涉

Android基础入门教程--10.14 Android GPS初涉 标签(空格分隔): Android基础入门教程 本节引言: 说到GPS这个名词,相信大家都不陌生,GPS全球定位技术嘛,嗯,Android中定位的方式 一般有这四种:GPS定位,WIFI定准,基站定位,AGPS定位(基站+GPS): 本系列教程只讲解GPS定位的基本使用!GPS是通过与卫星交互来获取设备当前的经纬度,准确 度较高,但也有一些缺点,最大的缺点就是:室内几乎无法使用-需要收到4颗卫星或以上 信号才能保证GPS的准确

Android基础入门教程——2.3.1 TextView(文本框)详解

Android基础入门教程--2.3.1 TextView(文本框)详解 标签(空格分隔): Android基础入门教程 本节引言: 学习完Android中的六大布局,从本节开始我们来一个个讲解Android中的UI控件,本节给大家带来的UI控件是:TextView(文本框),用于显示文本的一个控件,另外声明一点,我不是翻译API文档,不会一个个属性的去扣,只学实际开发中常用的,有用的,大家遇到感觉到陌生的属性可以查询对应的API!当然,每一节开始都会贴这一节对应API文档的链接:TextVie