站外题求助
  • 板块学术版
  • 楼主banglee
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/29 15:47
  • 上次更新2024/8/29 18:21:18
查看原帖
站外题求助
681292
banglee楼主2024/8/29 15:47

题目描述

你正在搬运货物,将货物从仓库的地面运送到顶楼。这个仓库有 nn 层,每一层的高度为 hih_i。

你的运输工具可以每次向上移动一层或两层,但每次移动后工具会消耗大量能量,因此经过一层的储能才能再次使用。储能过程中,你需要手动搬运货物。

现在,你需要计算从地面到仓库顶层你需要手动搬运的最小总高度。

输入格式

第一行包含一个整数 nn,表示仓库的层数。

第二行包含 nn 个整数,第 ii 个整数表示第 ii 层的高度 hih_i。

输出格式

一个数 xx,表示手动搬运的最小总高度。

样例 #1

样例输入 #1

6
5 2 4 5 3 2

样例输出 #1

5

数据范围

1≤n≤1061 \leq n \leq 10^6

1≤hi≤1001 \leq h_i \leq 100

我的代码:

#include<bits/stdc++.h>
using namespace std;
int n,a[1000005],dp[1000005][5];
int main(){
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>a[i];
    dp[0][1]=a[1];
	for(int i=2;i<=n;i++)
		dp[i][0]=min(dp[i-1][1],dp[i-2][1]),dp[i][1]=min(dp[i-1][1],dp[i-1][0])+a[i];
    cout<<min(dp[n][0],dp[n][1]);
	return 0;
}
2024/8/29 15:47
加载中...