题目
给定一个仅含小写字母的字符串 s,假设 s 的一个子序列 t 的第 i 个字符对应了原字符串中的第 pi 个字符。
我们定义 s 的一个松散子序列为:对于 i>1 总是有 pi−pi−1≥2。
设一个子序列的价值为其包含的每个字符的价值之和(a∼z 分别为 1∼26)。
求 s 的松散子序列中的最大价值。
输入
输入一行包含一个字符串 s。
输出
输出一行包含一个整数表示答案。
样例
输入样例:
azaazaz
输出样例:
78
CODE
#include<iostream>
#include<string.h>
using namespace std;
const int N = 1e6+10;
char s[N];
int q[N];
int f[N];
int main(){
scanf("%s",s);
int n = strlen(s);
for(int i=0;i<n;i++){
q[i+1] = s[i]-'a'+1;
}
for(int i=1;i<=n;i++){
if(i-2) f[i] = max(f[i-1],f[i-2]+q[i]);
if(i-3) f[i] = max(f[i],f[i-3]+q[i]);
}
printf("%d",f[n]);
}