应该算是比较显然的DP题啦:
f[i][2]:表示第i个字符是否选择的最大价值
f[i][0] = max(f[i - 1][0], f[i - 1][1]);
f[i][1] = f[i - 1][0] + w[i];
属性:MAX;
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int n;
string str;
int w[N], f[N][2];
int main()
{
cin >> str;
n = str.length();
for (int i = 0; i < n; ++ i) w[i + 1] = str[i] - 'a' + 1;
int res = 0;
for (int i = 1; i <= n; ++ i)
{
f[i][0] = max(f[i - 1][0], f[i - 1][1]);
f[i][1] = f[i - 1][0] + w[i];
res = max({res, f[i][0], f[i][1]});
}
cout << res << endl;
return 0;
}