SlideShare une entreprise Scribd logo
1  sur  16
Télécharger pour lire hors ligne
F問題 Sum of Numbers
作者 怒髪 (@dohatsutsu)
問題概要
a以上b以下の整数が書かれたカードがそれぞれc
枚ずつあるとき、その中からd枚のカードを選び、
そのカードに書かれてある整数の合計がeになる
場合の数を求めなさい。(mod 1,000,000,007)
問題概要
a=2,b=6,c=2,d=4,e=16のとき
{2,2,3,3,4,4,5,5,6,6}の10枚の中から、4枚選び合
計が16になる場合の数は、 {2,2,6,6},{2,3,5,6},
{2,4,4,6},{2,4,5,5},{3,3,4,6},
{3,3,5,5},{3,4,4,5}
の7通りである。
説明の前に、、、
dp[ i ][ j ] = i 枚のカードを選択して合計が j になる
場合の数
とおきます。
{2,2,3,3,4,4,5,5,6,6}の10枚の中から、4枚選び合
計が16になる場合の数
数字の2を使わないもの
{3,3,4,6},{3,3,5,5},{3,4,4,5}
数字の2を1つ使うもの
{2,3,5,6},{2,4,4,6},{2,4,5,5}
数字の2を2つ使うもの
{2,2,6,6}
数字の2を使わないものについて
{2,2,3,3,4,4,5,5,6,6}の12枚の中から、4枚選び合
計を12にしたあと、全部の数字を1増やす。
{2,2,3,5},{2,2,4,4},{2,3,3,4}
{3,3,4,6},{3,3,5,5},{3,4,4,5}
数字の2を1つ使うものについて
{2,2,3,3,4,4,5,5,6,6}の12枚の中から、3枚選び合
計が11にしたあと、全部の数字を1増やし、数字の
2を1つ追加する。
{2,3,6}, {2,4,5}, {3,3,5}, {3,4,4}
{2,3,4,7},{2,3,5,6},{2,4,4,6},{2,4,5,5}
数字の2を2つ使うものについて
{2,2,3,3,4,4,5,5,6,6}の12枚の中から、2枚選び合
計が10にしたあと、全部の数字を1増やし、数字の
2を2つ追加する。
{4,6} ,{5,5}
{2,2,5,7},{2,2,6,6}
数字の7を使ってしまっているものについて
{2,3,4,7},{2,2,5,7}
数字の7を1つ取り除くと、{2,3,4},{2,2,5}となり、3
枚で合計が9になっている。もちろんこれはdp[3][9]
に対応する。
(数字の7を2枚使っている場合、{?,?,7,7}となり、
残りの2枚の合計は2になるはずなので、これは
dp[2][2]に対応する。)
{2,2,3,3,4,4,5,5,6,6}の12枚の中から、4枚選び合計が
16になる場合の数
dp[4][16]=dp[4][12] (数字の2を使わないもの)
+dp[3][11] (数字の2を1つ使うもの)
+dp[2][10] (数字の2を2つ使うもの)
-dp[3][9]-dp[2][2] (数字の7は使用できないため)
=3+4+2-2-0
=7
解法
dp[ i ][ j ] = i 枚のカードを選択して合計が j になる
場合の数
dp[ i ][ j ] = Σ dp[ i - k ][ j - i - (a-1) * k ]
     -Σ dp[ i - k ][ j - (b+1) * k ]
c
k=0
k=1
c
高速化について
この漸化式を普通に計算しようとすると、O(cde)と
なりTLEになってしまう。
しかし、累積和を計算しておくことにより、Σの部分
の計算にループを用いる必要がなくなり、O(de)に
することができる。
メモリの節約について
int dp[1001][20001];と宣言するとMLEになってしまい
ます。
しかし最大でもc+1行前までしか参照しないため、dp
[101][20001];の配列を宣言し、再利用しながら計算し
ましょう。
First Accept - なし
問題の背景
蟻本のp66,67
AOJのid0097
これらを応用して問題を作りました。
ジャッジ解
@dohatsutsu (c++ 0.41sec 25776KB 35行)
(JAVA 0.66sec 46988KB 48行)
@zukky162 さん (c++ 0.88sec 53200KB 67行)

Contenu connexe

Plus de NariyoshiChida

Plus de NariyoshiChida (7)

RUPC2015Day2 - D
RUPC2015Day2 - DRUPC2015Day2 - D
RUPC2015Day2 - D
 
RUPC2015Day2 - A
RUPC2015Day2 - ARUPC2015Day2 - A
RUPC2015Day2 - A
 
RUPC2015Day2 - B
RUPC2015Day2 - BRUPC2015Day2 - B
RUPC2015Day2 - B
 
RUPC2015Day2 - H
RUPC2015Day2 - HRUPC2015Day2 - H
RUPC2015Day2 - H
 
RUPC2015Day2 - 総評
RUPC2015Day2 - 総評RUPC2015Day2 - 総評
RUPC2015Day2 - 総評
 
RUPC2015Day2 - J
RUPC2015Day2 - JRUPC2015Day2 - J
RUPC2015Day2 - J
 
RUPC2015Day2 - G
RUPC2015Day2 - GRUPC2015Day2 - G
RUPC2015Day2 - G
 

RUPC2015Day2 - F