先有 � N 块石头,编号为 1 , 2 , 3 , . . . , � 1,2,3,...,N。每块石头 � ( 1 ≤ � ≤ � ) i(1≤i≤N) 对应的高度为 ℎ � h i 。 最初小青蛙图图站在石头 1 1 上,他将重复若干次以下操作以到达石头 � N: 如果图图当前站在石头 � i 上,则可以跳到石头 � + 1 i+1 或 � + 2 i+2 上。需要 ∣ ℎ � − ℎ � ∣ ∣h i −h j ∣的体力, � ( � ≤ � ) j(j≤n) 是要落到的石头的编号。 请帮小青蛙图图计算出从石头 1 1 跳到石头 � N 上需要的最小体力值。以上的c++代码
时间: 2024-04-13 13:30:39 浏览: 107
以下是用 C++ 实现的代码:
```cpp
#include <iostream>
#include <vector>
#include <cmath>
int minEnergy(int N, std::vector<int>& heights) {
std::vector<int> dp(N+1, 0);
dp[1] = 0;
for (int i = 2; i <= N; i++) {
dp[i] = std::min(dp[i-1] + std::abs(heights[i] - heights[i-1]), dp[i-2] + std::abs(heights[i] - heights[i-2]));
}
return dp[N];
}
int main() {
int N;
std::cout << "请输入石头的数量:";
std::cin >> N;
std::vector<int> heights(N+1);
for (int i = 1; i <= N; i++) {
std::cout << "请输入石头 " << i << " 的高度:";
std::cin >> heights[i];
}
int result = minEnergy(N, heights);
std::cout << "从石头 1 跳到石头 " << N << " 需要的最小体力值为:" << result << std::endl;
return 0;
}
```
你可以将以上代码保存为一个 `.cpp` 的文件,然后编译运行即可得到结果。记得使用 C++ 编译器来编译该代码。希望对你有帮助!
阅读全文