思路
简单动态规划,设f[i][j]为爬完第i层需要的最短时间,j=0的时候表示爬完第i层的时候,没有经过跳跃,1表示经过了跳跃
代码
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
const int N=10010;
const int INF=0x3f3f3f3f;
int v[N];
int f[N][2];
int main(){
int n;
cin >> n;
for(int i=1;i<=n;i++)cin >> v[i];
for(int i=1;i<=n;i++)
{
f[i][0]=INF;
f[i][1]=INF;
}
for(int i=1;i<=n;i++){
f[i][0]=min(f[i-1][0],f[i-1][1])+v[i];
f[i][1]=f[i-1][0];
if(i-2>=0)f[i][1]=min(f[i][1],f[i-2][0]);
}
cout << min(f[n][0],f[n][1]);
}