蓝桥杯 算法提高 ADV-302 秘密行动

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 10010;

int n;
int a[N];
int f[N][2]; // 第二维为0的话表示到达某一层是跳上来的,为1表示爬上来的。
             // 一开始做时根本没想第二维,但是怎么做也做不对,所以又想了一下,其实上楼的过程是有限制的,
             // 比如这一层是跳上来的话,上一层一定是爬上来的,这一层是爬上来的,那么上一层既可以是跳上来的,也可以是爬上来的。

int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];

    f[1][0] = 0;
    f[1][1] = a[1];
    for (int i = 2; i <= n; i++)
    {
        f[i][0] = min(f[i - 1][1], f[i - 2][1]);
        f[i][1] = min(f[i - 1][0], f[i - 1][1]) + a[i]; // 这个不应该是a[i]-a[i-1]吗?但是因为样例没过,所以改了一下,居然才对了。。。
    }

    cout << min(f[n][0], f[n][1]) << endl;

    return 0;
}
原文地址:https://www.cnblogs.com/optimjie/p/12372129.html