#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