题意:给定n,k,长度为n的数组a以及长度为n的字符串s,a[i]对应为s[i]的权值,让你挑出满足条件的字符对应的权值相加,最大为多少,在一串连续相同的字符中不能挑超过k个。(我感觉说的太乱了)
题解:碰到一串连续的字符,先算长度,如果小于等于k则把对应的数字都加上,如果大于k,那么就先排序从大到小,然后加上前k个。
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
int n,k;
int a[200100];
cin>>n>>k;
for(int i=0; i<n; i++)
cin>>a[i];
string s;
cin>>s;
long long ans=0;
for(int i=0; i<n;)
{
int j=i+1;
int len=1;
for(; j<n; j++)
{
if(s[j]!=s[i])
break;
else len++;
}//i-j
if(len<=k)
{
for(int mmm=i; mmm<j; mmm++)
ans+=a[mmm];
}
else
{
sort(a+i,a+j);
for(int nnn=j-1; nnn>j-1-k; nnn--)
ans+=a[nnn];
}
i+=len;
}
cout<<ans<<endl;
return 0;
}