No.53 悪の漸化式
- トリッキーな問題と書いてあったので、おそらく精度落ちかなーとおもってたら案の定。long double で試してもダメだった。
- 高校レベルの漸化式を解いて一般項をだせばよい。一般項を計算しようとせずまず DP でやろうとするあたりはプログラマの弊害かも。(笑)
class EvilRecursion { public: void solve(void) { int N; cin>>N; // 通常の DP でやると long double でも精度落ちして WA になる // 漸化式 4*An = 19*An-1 - 12*An-2 は実は一般項を計算できる // 特性方程式 4*x^2 - 19*x + 12 = 0 を解いて // (4x-3)(x-4) = 0 // An = a*(3/4)^n + b*4^n // 初項から a=4, b=0 がわかる cout<<setprecision(20)<<4*pow(3.0/4.0, N)<<endl; } };