0表示爬,1表示跳,不能连续跳2次,因此1的状态只能由0转移过来。
#include<bits/stdc++.h>
using namespace std;
const int N=10010;
int dp[N][2],w[N];
int main()
{
int n;
cin>>n;
for(int i=2;i<=n+1;i++)
cin>>w[i];
//dp[0][0]=dp[0][1]=0;
for(int i=2;i<=n+1;i++)
{
dp[i][0]=min(dp[i-1][0]+w[i],dp[i-1][1]+w[i]);
dp[i][1]=min(dp[i-1][0],dp[i-2][0]);
}
cout<<min(dp[n+1][0],dp[n+1][1]);
return 0;
}