グリッドの列にN 1は、金は1の範囲〜N再スローを超えたグリッドは、あなたがグリッドにグリッドを取得する場所あなたが最も第1に、サイコロのすべてのスローが決定を開始し、各グリッドに愛金貨、金貨とnの最後の期待を取得するように依頼。
アイデア:、経験の問題を行う前後からプッシュすると予想されている、我々は最大のDPから開始し、
トランスファーケース1~6が、格子面6の現在の数よりも少ない場合に必要文献文章。
1の#include <cstdioを> 2の#include <アルゴリズム> 3の#include <math.h>の 4の#include < 文字列・H> 5の#include <キュー> 6 使って 名前空間STDを、 7 のconst int型 MAXN = 1E3 + 10 。 8 INT [MAXN]。 9 二重DP [MAXN]。 10 のint main()の 11 { 12 のint T。 13 int型 CNT = 0 。 14 のscanf(" %d個"、&T)。 15 一方(T-- ){ 16 INT N。 17 のscanf(" %d個"、&N) 18 のために(int型 i = 1 ; iが<= N; iが++)のscanf(" %dの"、および[I])。 19 のmemset(DP、0、はsizeof (DP))。 20 のためには、(int型 I = N; I> = 1 ; i-- ){ 21 // 对格子数特判的处理 22 二 塩基 = N- I; 23 もし(基地 > = 6)基地 = 6 。 24 25 [I] = DP [I]を、 26 のために(INT J = 1 ; J <= 塩基 ; J ++ ){ 27 、DP [I] + = DP / [I jの+] 塩基; 28 } 29 } 30 のprintf(" ケース%のD:%Fを\ n "、++ CNT、DP [ 1 ])。 31 } 32 リターン 0 。 33 }