#4726. dp练习2

dp练习2

当前没有测试数据。

第 1 题 数字金字塔(自底向上)

for(int i = n-1; i >= 1; i--)
    for(int j = 1; j <= i; j++)
        dp[i][j] += max( ____ );

A. dp[i-1][j], dp[i-1][j-1] B. dp[i+1][j], dp[i+1][j+1] C. dp[i-1][j], dp[i-1][j+1] D. dp[i+1][j], dp[i+1][j-1]


第 2 题 数字金字塔(自顶向下)

// 边界特判:最右列只能从左上方转移
else if(j == i) dp[i][j] = ____ + a[i][j];

A. dp[i-1][j] B. dp[i-1][j-1] C. dp[i][j-1] D. dp[i+1][j-1]


第 3 题 最长上升子序列(LIS)

if(a[i] > a[j]) 
    ____;

A. dp[i] = max(dp[i], dp[j] + 1) B. dp[i] = max(dp[i], dp[j]) C. dp[j] = max(dp[j], dp[i] + 1) D. dp[i] = dp[j]


第 4 题 最长公共子序列(LCS)

if(s1[i-1] == s2[j-1]) dp[i][j] = dp[i-1][j-1] + 1;
else dp[i][j] = ____;

A. dp[i-1][j-1] B. max(dp[i-1][j-1], dp[i][j]) C. max(dp[i-1][j], dp[i][j-1]) D. min(dp[i-1][j], dp[i][j-1])


第 5 题 编辑距离(字符串最少操作)

if(s1[i-1] == s2[j-1]) dp[i][j] = dp[i-1][j-1];
else dp[i][j] = min({dp[i-1][j-1], dp[i-1][j], dp[i][j-1]}) ____;

A. + 0 B. + 1 C. - 1 D. + 2


第 6 题 01 背包(一维优化版)

// 核心循环:保证每个物品只选一次
for(int i = 1; i <= n; i++)
    for( ____ )
        dp[j] = max(dp[j], dp[j - w[i]] + v[i]);

A. int j = w[i]; j <= V; j++ B. int j = V; j >= w[i]; j-- C. int j = 1; j <= V; j++ D. int j = V; j >= 1; j--


第 7 题 完全背包(一维优化版)

// 核心循环:物品可重复选取
for(int i = 1; i <= n; i++)
    for( ____ )
        dp[j] = max(dp[j], dp[j - w[i]] + v[i]);

A. int j = V; j >= w[i]; j-- B. int j = w[i]; j <= V; j++ C. int j = V; j >= 1; j-- D. int j = 1; j <= w[i]; j++


第 8 题 多重背包(二维基础版)

// 枚举选取k个物品
for(int k = 1; k <= s[i] && k*w[i] <= j; k++)
    dp[i][j] = max(dp[i][j], ____ + k*v[i]);

A. dp[i][j - k*w[i]] B. dp[i-1][j - k*w[i]] C. dp[i-1][j - w[i]] D. dp[i][j - w[i]]


第 9 题 多重背包(二进制优化)

// 二进制拆分核心逻辑
int k = 1;
while(ss >= k){
    tw[++cnt] = k * ww;
    tv[cnt] = k * vv;
    ss -= k;
    ____;
}

A. k *= 2 B. k += 1 C. k *= k D. k /= 2


第 10 题 编辑距离(边界初始化)

// 空字符串转换的边界
for(int i = 0; i <= l1; i++) ____;
for(int j = 0; j <= l2; j++) dp[0][j] = j;

A. dp[0][i] = i B. dp[i][0] = i C. dp[i][0] = 0 D. dp[0][i] = 0