洛谷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]);          //最后还要再判断一下
}


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