本题的状态量有两个,一个是攀爬次数,一个是当前位置。所以开一个二维数组,数组值为所记录的高度。状态转移则由当前高度加减攀爬高度所对应的数组值实现,也就是dp[i][j]=min(dp[i][j-a[i]](代表本次攀爬是向上的),dp[i][j]+a[i])代表本题攀爬是向下的。不过在枚举当前位置的时候可能会出现上下越界问题和位置存在性问题(就是说那几次攀爬可不可能到达某些位置),都需要一一判断。
//#include<pch.h>
#include <iostream>
#include <cstdio>
#include <bits/stdc++.h>
#include <map>
#include <algorithm>
#include <stack>
#include <iomanip>
#include <cstring>
#include <cmath>
#define DETERMINATION main
#define lldin(a) scanf_s("%lld", &a)
#define println(a) printf("%lld\n", a)
#define reset(a, b) memset(a, b, sizeof(a))
const int INF = 0x3f3f3f3f;
using namespace std;
const double PI = acos(-1);
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
const int mod = 1000000007;
const int tool_const = 19991126;
c