蓝桥杯 算法提高 秘密行动 dp 总体思路是用dp[i][j] 状态是第i步能否可以跳跃 dp[i][1]是能够跳跃的,反之,dp[i][0]不能跳跃。 状态时

dp[i][1]=min(dp[i-1][1]+a[i],dp[i-1][0]+a[i]);
dp[i][0]=min(dp[i-1][1],dp[i-2][1]);

对应第一行时i-1步走上去, 第二行是没法跳跃,故前面是跳跃过了的。

#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
typedef long long ll;
const int N =1e6+10;
int n,m;
struct cmp {
	bool operator()(const int&a,const int&b) const {
		return a>b;
	}
};
int dp[10010][2];
int a[10010];
int main() {
	cin >>n;
	for(int i =1;i<=n;i++)
	cin >> a[i];
	memset(dp,0,sizeof(dp));
	//dp[1][0]=a[0];
	//dp[1][0]=0;
	dp[1][1]=a[1];
	//dp[2][0]=0;
	for(int i =2;i<=n;i++){//1ÄÜÌø 
		dp[i][1]=min(dp[i-1][1]+a[i],dp[i-1][0]+a[i]);
		dp[i][0]=min(dp[i-1][1],dp[i-2][1]);		
	}
	cout<<min(dp[n][1],dp[n][0]);
	return 0;
}