Antの計数POJ 3046(DPカウント)

オリジナルタイトル

トピックリンク

トピック分析

実際には、気持ちも計算を行うために組み合わせて使用​​することができ、DPのタイトルを数えるが、私はあなたが一般式.DP DPの定義をプッシュすることはできません、あまりにも料理だった[I] [J]、その後、どのように多くの選挙法I jのアリの前に選択されていますC [i]はi番目の種の数を表し、次のように漸化式は、です

DP [I] [J] =Σ(分(J、C [i])と、K = 0)DP [I-1] [JK]。クリック、DP [I] [J] =Σ(Cを簡略化することができます[i]は、K = 0)DP [I-1] [J-1-K] + DP [I-1] [j]は-dp [I-1] [J-1-C [I]、そして最後に答えがdp [T] [S] + DP [T] [S + 1] + ... + DP [T] [B]。この質問は、その後成形するために押され、すなわちのみI iおよびI-1でありますなお、第1の次元I = 1、I = 0に圧縮することができます。

コード

1の#include <iostreamの>
 2の#include <アルゴリズム>
 3の#include <ユーティリティ>
 4の#include <cstdioを>
 5の#include <cmath>
 6の#include <CStringの>
 7の#include < ストリング >
 8の#include <ベクトル>
 9# <積層体>含む
 10の#include <キュー>
 11の#include <地図>
 12 <の#include 設定 >
 13  
14  使って 名前空間STDを、
15 typedefの長い 長いLL。
  INF_INT = 0x3f3f3f3f 17  CONST LL INF_LL = 0x3f3f3f3f3f3f3f3f 18  
19  CONST  INT MOD = 1E6。
20  のint NUM [ 2000 ]。
21 LL DP [ 2 ] [ 200000 ]。
22  
23  のint main()の
 24  {
 25  //     freopenは( "black.in"、 "R"、STDIN)。
26  //     freopenは( "black.out"、 "W"、STDOUT)。
27      int型のT、S、B。
28      CIN >> T >> A >> S >> B。
     int型 I = 0 ; iが<; Iは++ 30      {
 31          のint X;
32          のscanf(" %dの"、およびX)
33          NUM [X] ++ ;
34      }
 35      int型の合計= 0 ;
36      のためには、int型 I = 1 ; I <= T; iは++ 37      {
 38          合計+ = NUM [I]。
39          int型になりました= I&1、最後の=!今;
40          DP [今] [ 0] = DP [最終] [ 0 ] = 1 41          のためにINT J = 1 ; J <=総; J ++ 42          {
 43              であれば(J- 1 -num [I]> = 0)DP [今] [J] =(DP [今] [J- 1 ] + DP [最終] [J] -dp [最終] [J- 1 -num [I])%MOD。
44              他の DP [今] [J] =([今] DP [J- 1 ] + DP [最終] [J])%MOD。
45          }
 46      }
 47      LL ANS = 0 48      INT RES = T&1 49     int型、iが= Bを<; I = sのI ++)はANS =(ANS + DP [RES] [I])%のMOD。
50      COUT <<(ANS + MOD)%のMOD << ENDL。
51      リターン 0 52 }

 

 

おすすめ

転載: www.cnblogs.com/VBEL/p/11407147.html