アイデア:
所望のDP [x]は独立変数として、それが所望の値にガウスの消去法のセットのための方程式を解く、再帰方程式と見なすことができる解決することができます
逆のプロセスを解決するためのガウスの消去は、注意の必要な、定数項境界例をプッシュするプロセスであり、それは6 / D、1でありません
コード:
#pragma GCCの最適化(2) の#pragma GCCの最適化(3) の#pragma GCCの最適化(4) の#include <ビット/ STDC ++ H> 使用して 名前空間STD。 #define Y1 Y11 の#define Fiの第一 の#define SE第二 の#defineのPI ACOS(-1.0) の#defineが長い長いLL // の#define MP make_pair の#define PB emplace_back の#define LS RT << 1、L、M の#define RS RT << 1 | 1、M + 1、R の#define ULL符号なしのLL の#define PLL対<LL、LL> の#define PLI対<LL、整数> の#definePII対<整数、整数> の#define PIII対<PII、整数> の#define PDD対<二重、二重> の#define MEM(A、B)のmemset(A、B、はsizeof(A)) の#defineデバッグ(X) CERR << #X << "=" << X << "\ nを"; #define FIO IOS :: sync_with_stdio(偽); cin.tie(0); cout.tie(0)。 // ヘッド のconst int型 N = 105 ; ダブルA [N] [N]。 ボイドガウス(int型N){ ため(int型 i = 0 ; iがn <; iは++ ){ int型 R = I。 J =は+ 1を、J <N; J ++ ) 場合(ファブ([J] [I])>ファブ([R] [I]))、R = J。 もし(R = I!)のために(INT J = 0 ; J <= N; J ++ )スワップ([R] [J]、A [i]は[J])。 用(INT - ; J> I = J J = N ){ ための(int型 K = I + 1 ; K <N ++ k個) A [K] [J] - = A [K] [I] / A [i]は[I] * [I] [J]。 } }が ため(int型 I = N - 1 ; I> = 0 ; I -){ ための(int型 J = I + 1、J <N; J ++ ) A [i]が[N] - = A [j]と[N] * A [I] [J]。 [I] [N] / = A [i]は[I]。 } } int型 [に対して、B、Tを、nは、105 ]。 INT メイン(){ scanf関数(" %のD "、&T)。 用(INT CS = 1 ++; CS <= T {CS) のscanf(" %d個"、&N) 以下のための(int型私は=1 ; 私は= < 100 ; ++ I)への[I] = 0 ; 以下のために(int型 i = 1 ; iは= N <; ++ I)のscanf(" %d個の%のD "、&、&B)、[A] =を、B。 以下のために(int型 i = 0 ; iは= < 100 ; ++ I)のために(int型 J = 0 ; J <= 100 ; ++ j)のA [i]は[J] = 0 ; 以下のために(int型 i = 1 ; iは= < 100 ; ++ I){ [I - 1] [I- 1 ] = 1 。 もし([I]に){ [I - 1 ] [[I]に- 1 ] = - 1 。 } 他{ int型のx =分(6、100 - I)。 用(INTの J = 1 ; J <= xと; ++ J){ [I - 1 ] [I + J- 1 ] = - 1.0 / X。 } もし(I < 100)A [I-1 ] [ 100 ] = 6.0 / X。 } } ガウス(100 )。 printf(" ケース%D:%.10fする\ n "、CS、A [ 0 ] [ 100 ])。 } 戻り 0 。 }