哈利波特的魔杖(wand)
题目描述
哈利波特跟随着伟大的魔法学院的院长——邓布利多,来到了一家破旧的的魔杖店,为小哈利选购一根适合他的魔杖。店主惊叹于小哈利的魔法天赋,决定用今天刚到的魔杖原材料,亲手为他制作一根最强大的魔杖。这根魔杖由多块宝石组成,宝石共有26种,为A B .X Y Z(不区分大小写),它们的魔力值范围为1-26,并且每块宝石的魔力值是多少,并不是固定的,而是由店主赋予的。
现在店主想要让这根魔杖的总魔力值最大,应该如何去给每块宝石赋予魔力值,最大魔力值为多少。
输入格式
第一行是一个由字母组成的字符串,字符串的长度≤10000
输出格式
输出一个整数,表示能够组成的魔杖的最大魔力值
输入输出样列
输入样例1:复制
dad
输出样例1:复制
77
说明
魔杖上的宝石是dad,那么可以将26魔力值赋予d,将25魔力值赋予a,此时魔杖的总魔力值为77
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
string str = "dad";
vector<int> map(26);
int ans=0;
for (int i = 0; i < str.length(); i++) {
map[tolower(str[i]) - 'a']++;
}
sort(map.begin(), map.end());
for (int i = 1; i <= 26; i++) {
ans += map[i-1] * i;
}
cout << ans;
return 0;
}