题目大意:一个塔,有n层,高度不同,小A可以选择跳,用一次可以让他向上跳一层或两层,但是每次跳后小A必须爬过至少一层才能再次跳跃,或者爬,每爬一层要消耗当前楼层高度的时间,求最短时间。
#include<iostream>
#include<algorithm>
using namespace std;
int a[1001000],p[1001000],t[1001000];
int main()
{
int n;
cin>>n;
for (int i=1;i<=n;i++)
cin>>a[i];
p[0]=0;p[1]=a[1]; //p为爬数组,t为跳数组
t[1]=0;
for (int i=2;i<=n;i++)
{
p[i]=min(p[i-1],t[i-1])+a[i]; //dp,不解释
t[i]=min(p[i-1],p[i-2]);
}
cout<<min(p[n],t[n]); //最后还要再判断一下
}