2009 JOI 予選 6 ビンゴ
問題名
ビンゴ
方針
長さn^2の増加部分列の個数を求める問題。ただし、1≦ai≦m, sum{ai}=s, aiはdistinctという条件のもとで。
dp[i][j][k]:=数字iまでで考えて、j項目まで埋まっていて、和がkであるような通り数
初期条件:dp[0][0][0]=1, 他は0
求めるもの:dp[m][n^2][s]
遷移:
- 数字iを使わない:dp[i][j][k]+=dp[i-1][j][k] (数列は伸びない)
- 数字iを使う:dp[i][j][i+k]+=dp[i-1][j-1]k
とすると、MLEになったので、iの分の次元を削るためにswapテク(偶奇のテク)か、jのループを逆にするテクを使うといい。
解答
swap : https://joi2009yo.contest.atcoder.jp/submissions/2243605
逆向きのループ : https://joi2009yo.contest.atcoder.jp/submissions/2243509
感想
他の人の解答を見て考えたけど、しっくりきてない……。