#2382. L3-25阶段复习与测评

L3-25阶段复习与测评

  1. 给定序列 [1, 3, 2, 4, 5],最长递增子序列的长度是多少?() {{ select(1) }}
  • 3
  • 4
  • 5
  • 2
  1. 有一个容量为5的背包,物品重量和价值分别为:物品1(2,3)、物品2(3,4)、物品3(4,5)。求最大价值() {{ select(2) }}
  • 7
  • 8
  • 9
  • 10
  1. 在一个3x3的网格中,从左上角到右下角有多少条路径?只能向右或向下移动。() {{ select(3) }}
  • 6
  • 10
  • 12
  • 8
  1. 矩阵链乘:矩阵A1(10x30), A2(30x5), A3(5x60)。求最小乘法次数() {{ select(4) }}
  • 4500
  • 3000
  • 1500
  • 2000
  1. 当n=5时,输出什么?()
#include <iostream>
#include <vector>
using namespace std;

int fib(int n) {
    if (n <= 1) return n;
    vector<int> dp(n+1, 0);
    dp[0] = 0;
    dp[1] = 1;
    for (int i = 2; i <= n; i++) {
        dp[i] = dp[i-1] + dp[i-2];
    }
    return dp[n];
}

int main() {
    cout << fib(5);
    return 0;
}

{{ select(5) }}

  • 3
  • 5
  • 8
  • 13
  1. 以下代码的运行结果是()
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int knapsack(int W, vector<int>& wt, vector<int>& val, int n) {
    vector<vector<int>> dp(n+1, vector<int>(W+1, 0));
    for (int i = 1; i <= n; i++) {
        for (int w = 1; w <= W; w++) {
            if (wt[i-1] <= w) {
                dp[i][w] = max(val[i-1] + dp[i-1][w - wt[i-1]], dp[i-1][w]);
            } else {
                dp[i][w] = dp[i-1][w];
            }
        }
    }
    return dp[n][W];
}

int main() {
    int W = 4;
    vector<int> wt = {1, 2, 3};
    vector<int> val = {2, 3, 4};
    int n = 3;
    cout << knapsack(W, wt, val, n);
    return 0;
}

{{ select(6) }}

  • 5
  • 6
  • 7
  • 8
  1. 石子合并:有4堆石子,每堆重量分别为[1,2,3,4],每次合并相邻两堆,代价为两堆重量和,求最小总代价。()

{{ select(6) }}

  • 18
  • 19
  • 20
  • 21
  1. 给定字符串"abcba",最长回文子序列的长度是多少?()
    {{ select(8) }}
  • 3
  • 4
  • 5
  • 2
  1. 完全背包问题:背包容量为5,物品重量和价值分别为:物品1(1,2)、物品2(2,3)、物品3(3,4)。每个物品无限个。求最大价值。() {{ select(9) }}
  • 7
  • 8
  • 9
  • 10
  1. 爬楼梯问题:有n阶楼梯,每次可以爬1或2个台阶,爬到顶部有多少种不同的方法?当n=4时,答案是多少?() {{ select(10) }}
  • 3
  • 4
  • 5
  • 6