CF447B DZY Loves Strings 题解

题目传送门

\(\texttt{Solution}\):

  1. 先算出来题目给定的字符串的价值。

  2. 对于插入字符,手玩样例可知每个字符可以插入无数次,使用贪心策略,每次挑选价值最大的字母插入。

  • 价值最大的字母可以边输入边记录,初始化最大值时应定义非正数,以便更新最大值。

  • 在枚举时,要注意价值的计算方法,不要算错。

\(\texttt{Code}\):

#include<bits/stdc++.h>   //万能头文件  
using namespace std;

string s;

int k,a[30];
int ans,maxn=-9999999;
//ans 记录最终价值,maxn 记录 价值最大的字符的价值 

signed main()
{
	cin>>s>>k;
	
	for(int i=0;i<26;i++) cin>>a[i],maxn=max(maxn,a[i]);
	//记录 价值最大的字符的价值 
	for(int i=0;i<s.size();i++) ans+=a[s[i]-'a']*(i+1);
	//按照题意,把给定的字符串的总价值算出 
	for(int i=1;i<=k;i++) ans+=maxn*(s.size()+i);
	//贪心,每次把价值最大的字母加入队尾 
	cout<<ans;
	return 0;
}
posted @ 2025-02-08 16:39  Wy_x  阅读(11)  评论(0)    收藏  举报