如何在动态规划中使其工作 f[i] = max(f[i], f[i - 1] + f[i]) ?

  • 本文关键字:max 工作 动态规划 c
  • 更新时间 :
  • 英文 :


这里的动态编程 是一个问题
大写字母 AZ 对应于整数 [-13,12],因此字符串对应于整个列。我们将相应整列的总和称为字符串的特征值。例如:字符串 ACM 对应的整体列为 {-13, -11, -1},则 ACM 的特征变量 (-13( + (-11( + (-1( = -25;其子弦AC变量-24的特性;子字符串 M 的特征级别 -1.给你一个字符串,找出字符串所有子字符串的最大特征值。

#include<stdio.h>
#include<string.H>
#include<algorithm>
using namespace std;
int main(){
int n, f[1000];
char s[1000];
scanf("%d", &n);
while(n--){
int ans;
scanf("%s", &s[0]);
ans = f[0] = s[0] - 'A' - 13;
for(int i = 1; i < strlen(s); ++i){
f[i] = s[i] - 'A' - 13;
f[i] = max(f[i], f[i - 1] + f[i]);  //I can't understand
if(f[i] > ans)
ans = f[i];
}
printf("%dn", ans);
}
return 0;
}

该行代码将当前索引最大值设置为当前字母的最大值,或添加到上一个索引最大值的当前字母。此循环获取每个索引的字符串的最大值。要获得总答案,您可以逐步决定是要将下一个字母添加到上一个最大值,还是开始一个新的子字符串。如果黄金答案大于以前,ans更新它。

最新更新