Isa@Diary

ソフトウェア開発やってます。プログラミングとか、US生活とかについて書きます。

SRM401 Div.1 Easy FIELDDiagrams

問題

整数nが与えられる。
0,1,...,n-1行にそれぞれn-1,n-2,...1個のスペースがあるとし、左詰めで箱を詰める。
ただし、i行目の箱の数a_はa_i>a_j(i

方針

要は下に行くほど少なくなっていけばよい。
n-1行は0個か1個なので

dp[0][0] = 1;
dp[0][1] = 1;

とする。

dp[i][j] = sum(dp[i-1][0], dp[i-1][1] ... dp[i-1][j-1])

としてDPテーブルを更新していけばよい。

  • >Passed System Test 219.42pts

実際には配るDPで実装した。

以下ソースコード

    long long countDiagrams(int n) {
        ll dp[n+2][n+2],ret=0;
        memset(dp, 0, sizeof(dp));

        dp[0][0] = 1;
        dp[0][1] = 1;

        for(int i=0;i<n-1;i++){
            for(int j=0;j<=i+1;j++){
                for(int k=j;k<=i+2;k++){
                    dp[i+1][k] += dp[i][j];
                }
            }
        }
        for(int i=1;i<=n;i++){
            ret += dp[n-1][i];
        }
        return ret;
    }