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

程序(三):是否任意 f[i][j]≤f[n][n]

题目

阅读下面的程序,回答问题。 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]); } 判断题:当程序运行完毕后,对于所有的 1≤i,j≤n,都一定有 f[i][j]≤f[n][n]。( 填 √ 或 × )

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