#z60. 动态规划-最长公共子序列(LCS)代码拆解复习

动态规划-最长公共子序列(LCS)代码拆解复习

#include<iostream>
using namespace std;
string  s1,s2;
int dp[1100][1100];
int main(){
    cin>>s1>>s2;
    int l1=s1.size();
    int l2=s2.size();
    for(int i=1;i<=l1;i++){
        for(int j=1;j<=l2;j++){
            if(s1[i-1]==s2[j-1]){
                dp[i][j]=dp[i-1][j-1]+1;
            }
            else{
                dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
            }
        }
    }
    cout<<dp[l1][l2];
    return 0;
}

[题目描述]

{{ 代码中dp[i][j]的含义是? }} {{ select(1) }}

  • [选项1] a 的前 i 个字符和 b 的前 j 个字符的最长公共子串长度
  • [选项2] a 的前 i 个字符和 b 的前 j 个字符的最长公共子序列长度
  • [选项3] a 的第 i 个字符和 b 的第 j 个字符是否相等
  • [选项4] a 的前 i 个字符与 b 的前 j 个字符的编辑距离

[题目描述]

{{ 当执行if(a[i-1]==b[j-1])时,索引使用i-1和j-1的原因是? }} {{ select(2) }}

  • [选项1] C++ 数组索引从 0 开始,而循环变量 i、j 从 1 开始
  • [选项2] 为了处理字符串长度为 0 的情况
  • [选项3] 这是动态规划的标准写法
  • [选项4] 避免数组越界

[题目描述]

{{ 若输入字符串a="abc"和b="acb",最终输出结果是? }} {{ select(3) }}

  • [选项1] 1
  • [选项2] 2
  • [选项3] 3
  • [选项4] 0

[题目描述]

{{ 代码中max(dp[i-1][j], dp[i][j-1])的作用是? }} {{ select(4) }}

  • [选项1] 确保不重复计算相同子问题
  • [选项2] 回溯寻找公共子序列
  • [选项3] 处理当前字符不相等时的最优选择
  • [选项4] 初始化动态规划数组

[题目描述]

{{ 动态规划数组dp的大小定义为[1100][1100],这样做的潜在问题是? }} {{ select(5) }}

  • [选项1] 无法处理长度超过 1100 的字符串
  • [选项2] 会导致运行时间显著增加
  • [选项3] 浪费内存,应使用动态内存分配
  • [选项4] 编译错误

[题目描述]

{{ 代码中双重循环的时间复杂度是? }} {{ select(6) }}

  • [选项1] O(n)
  • [选项2] O(n²)
  • [选项3] O(nlogn)
  • [选项4] O(2ⁿ)

[题目描述]

{{ 若将循环条件改为for(int i=0; i<l1; i++),需要同时修改的部分是? }} {{ select(7) }}

  • [选项1] dp[i][j]改为dp[i+1][j+1]
  • [选项2] a[i-1]改为a[i]
  • [选项3] max(dp[i-1][j], dp[i][j-1])改为max(dp[i][j-1], dp[i-1][j])
  • [选项4] 无需修改

[题目描述]

{{ 代码中#include<bits/stdc++.h>的作用是? }} {{ select(8) }}

  • [选项1] 包含所有标准库头文件
  • [选项2] 优化代码运行速度
  • [选项3] 启用 C++11 特性
  • [选项4] 提高代码可读性

[题目描述]

{{ 代码中使用using namespace std;会导致命名冲突,应避免使用。( ) }} {{ select(9) }}

  • [选项1] A正确
  • [选项2] B错误

[题目描述]

{{ 若输入字符串长度均为 n,动态规划数组dp的空间复杂度是 O (n)。( ) }} {{ select(10) }}

  • [选项1] A正确
  • [选项2] B错误

[题目描述]

{{ 当a[i-1] == b[j-1]时,dp[i][j]的值仅取决于dp[i-1][j-1]。( ) }} {{ select(11) }}

  • [选项1] A正确
  • [选项2] B错误