#include <iostream> #include <cstring> using namespace std; const int MAXN = 1005; int dp[MAXN][MAXN]; int main() { string X, Y; cin >> X >> Y; int lenX = X.length(), lenY = Y.length(); memset(dp, 0, sizeof(dp)); for (int i = 1; i <= lenX; i++) { for (int j = 1; j <= lenY; j++) { if (X[i - 1] == Y[j - 1]) { dp[i][j] = dp[i - 1][j - 1] + 1; } else { dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]); } } } for (int i = 1; i <= lenX; i++) { for (int j = 1; j <= lenY; j++) { cout << dp[i][j] << " "; } cout << endl; } return 0; }分析
时间: 2024-01-12 13:05:36 浏览: 95
; j++) {
fprintf(fp, " %d", schools[i].femaleProj[j]);
}
fprintf(fp, "\n");
}
fprintf(fp, "%d\n", projectCount);
for (int i = 0; i < projectCount; i这是一个最长公共子序列(LCS)问题的动态规划解法。代码中定义了一个二++) {
fprintf(fp, "%s %c %c", projects[i].name, projects[i].isMale ? 'M' : '维数组dp,其中dp[i][j]表示字符串X的前i个字符和字符串Y的前j个字符的最长F', projects[i].isTop5 ? '5' : '3');
for (int j = 0; j < projects[i].scoreCount; j++) {
fprintf(fp, " %d", projects[i].scores[j]);
}
fprintf(fp, "\公共子序列长度。接下来,使用两个嵌套的for循环,遍历所有可能的子串组n");
}
fprintf(fp, "%d\n", recordCount);
for (int i = 0; i < recordCount合,判断当前字符是否相等,根据相等或不相等的情况更新dp数组的值。最后,; i++) {
fprintf(fp, "%d %d %d\n", records[i].schoolId, records[i].projectId, records[i].rank);
}
fclose(fp);
}
return 0;
default:
printf("非法输入,请重新输入再次遍历dp数组,输出其中的所有值。
该算法的时间复杂度为O(lenX * lenY),\n");
break;
}
}
return 0;
}
```
这个程序使用了结构体来保存学其中lenX和lenY分别为字符串X和Y的长度。该算法可以用于求解两个字符串的最校、项目和获奖记录,其中学校有编号、名称、总分和男女团体总分等属性,项目长公共子序列问题,例如求解两个DNA序列的相似性。
阅读全文