dp的题要确定好属性以及列好状态方程,这道题的状态方程f[i][2]代表着第i个数选不选,f[i][0]为不选,f[i][1]为选择,在不选的前提下,还要用状态数组表示第i-1到底选不选,两种情况取最大值,第i-1个不选第i个一定就能选,然后输出max(f[i][0],f[i][1]),取得最大值,动态规划要要确定好列几维的数组,列好状态方程。
松散数组,具体代码如下:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e6+1;
char str[N];
int f[N][2];
int main()
{
scanf("%s",str+1);
int n=strlen(str+1);
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]+str[i]-'a'+1;
}
cout<<max(f[n][0],f[n][1])<<endl;
}