有 n 盞燈泡排成一排,第一盞高度固定為 A,最後一盞高度為 B(待求最小值)。相鄰三盞燈泡滿足遞推關係:
H[i] = 2*H[i-1] + 2 - H[i-2](i ≥ 3)。
要求所有燈泡高度非負,求最小可能的 B。
#include
using namespace std;
const int MAXN = 1500;
int n;
double A, B, H[MAXN];
bool check(double h2) {
H[1] = A;
H[2] = h2;
for (int i = 3; i <= n; ++i) {
H[i] = 2*H[i-1] + 2 - H[i-2];
if (H[i] < 0) return false;
}
B = H[n];
return true;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
while (cin >> n >> A) {
double lo = -1, hi = 1e6;
for (int iter = 0; iter < 100; ++iter) { // 固定迭代次數保證精度
double mid = (lo + hi) / 2;
if (check(mid)) hi = mid;
else lo = mid;
}
check(hi); // 刷新 B
cout << fixed << setprecision(2) << B << '\n';
}
return 0;
}
%.2lf / setprecision(2) 符合題目要求。