csppass
连续 00 XP登录 / 注册
202528判断题动态规划提高

程序(三):给定输入时输出是否为 2

题目

阅读下面的程序,回答问题。 int f[5007][5007]; int a[5007], b[5007]; int n; int main(){ scanf("%d", &n); for (int i = 1; i <= n; ++i) scanf("%d", &a[i]); for (int i = 1; i <= n; ++i) scanf("%d", &b[i]); for (int i = 1; i <= n; ++i){ for (int j = 1; j <= n; ++j){ f[i][j] = std::max(f[i - 1][j], f[i][j - 1]); if (a[i] == b[j]) f[i][j] = std::max(f[i][j], f[i - 1][j - 1] + 1); } } printf("%d\n", f[n][n]); } 判断题:当输入 4 1 2 3 4 1 3 2 2 时,输出为 2。( 填 √ 或 × )

考点拆解
经典二维 LCS(最长公共子序列)动态规划
f[i][j]=max(f[i-1][j],f[i][j-1]),若 a[i]==b[j] 再与 f[i-1][j-1]+1 取最大
易错提醒
阅读程序题要按变量变化顺序手推,不要跳步
选择题要检查单位、边界和题目中的否定词