洛谷p2800又上鎖妖塔

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章