c - 如何使其在动态规划中适用于 f[i] = max(f[i], f[i - 1] + f[i]) ?

标签 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("%d\n", ans);
    }
    return 0;
}

最佳答案

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

关于c - 如何使其在动态规划中适用于 f[i] = max(f[i], f[i - 1] + f[i]) ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59619631/

相关文章:

c - 通过指向函数的指针传递值。我们应该在函数内部创建变量副本吗?

c - 带后期增量的垃圾值

c - 输入整数(无限制)并找到最小的(C语言)

C:在空输入时中断循环

c - 如何正确获取一行并用 C 解析它

收集 2 : error: ld returned 1 exit status, gcc

c - 如何在命令行执行c文件

c - C 中的矩阵乘法问题

c - 通用堆栈不推送或弹出值

c++ - 在哪里放置以及如何在 C++ 项目中包含 dll 文件?