#BW189. 普及组CSP-J初赛程序阅读训练03

普及组CSP-J初赛程序阅读训练03

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> a(n);
    for(int i = 0; i < n; i++)
        cin >> a[i];
    vector<int> dp(n + 1, 0);
    for(int i = 0; i < n; i++) {
        if(i >= 2)
            dp[i] = max(dp[i - 1], dp[i - 2] + a[i]);
        else
            dp[i] += a[i];
        if(i >= 1)
            dp[i] = max(dp[i], dp[i - 1]);
    }
    int ans = 0;
    for(int i = 0; i < n; i++) {
        ans = max(ans, dp[i]);
    }
    cout << ans << endl;
    return 0;
}

判断题

第 1 题

若输入 5 2 7 9 3 1,则输出为 12。
{{ select(1) }}

  • 正确
  • 错误

第 2 题

这段代码对应的状态转移方程为dp[i]=max(dp[i1],dp[i2]+a[i])i>=2dp[i] = \max(dp[i-1], dp[i-2] + a[i]) ,i>=2;初值为 dp[0]=a[0]dp[1]=a[1]dp[0] = a[0] ,dp[1] = a[1]
{{ select(2) }}

  • 正确
  • 错误

第 3 题

(2分)在主函数中,访问dp[n]dp[n]不会发生越界错误。
{{ select(3) }}

  • 正确
  • 错误

选择题

第 4 题

当输入的aa数组为 {2, 1, 1, 2} 时,程序的输出为( )。
{{ select(4) }}

  • 1
  • 2
  • 3
  • 4

第 5 题

若将第 13 行改为
dp[i] = max(dp[i-1], dp[i-2] - a[i])
则当输入的 ( a ) 数组为 {10, 1, 0, 25, 3} 时,程序的输出为( )。
{{ select(5) }}

  • 1
  • 10
  • 35
  • 25

第 6 题

(4分)当输入的 ( a ) 数组为 {0, 2, 3, 0, 5, 6, 0, 8, 9} 时,程序的输出为( )。
{{ select(6) }}

  • 18
  • 33
  • 34
  • 2