主要的思路是设到达最后一个时,能量消耗已经为0,接着依次逆序处理。由于中途存在向上取整的问题,所以计算出的最少能量在正序推时最后的能量不一定为0.
#include<iostream>
#include<iomanip>
#include<vector>
#include<map>
#include<string>
#include<algorithm>
using namespace std;
int main(){
int n,h;
cin >> n;
vector<int> H;
for(int i = 0;i < n;i++){
cin >>h;
H.push_back(h);
}
int e = 0;
int temp;
for(int j = n - 1;j >= 0;j--){
//cout << "当前是第"<<j<<"个位置,此时的能量是"<< e <<"下一个H的高度为" << H[j+1]<< endl;
temp = (e + H[j]) / 2;
if(( e + H[j]) % 2 != 0){
temp += 1;
}
e = temp;
}
cout << e;
return 0;
}
京公网安备 11010502036488号