題目大意:一個塔,有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]); //最後還要再判斷一下
}