Hatena::Grouptopcoder

cafelier@SRM

cafelier のSRM参加記録です。コンテスト中に考えてたことを執拗に全部書き残すとどうなるだろうかという試み本番中にこういうコードが書きたかったなあ、という後で書いた反省コードを書き残す試み

スパムが来たのでしばらくコメント欄をはてなユーザ限定にしています、すみません、

 | 

2008-12-24

SRM431 Div1 500

| 14:53 | はてなブックマーク -  SRM431 Div1 500 - cafelier@SRM

やっぱり電車の待ち時間で解けるくらい何の変哲もないDPだった…;;


static const long long MODVAL = 1000000007;
int memo[10][11][1001][9];

class MegaCoolNumbers
{
public:
  int count(int N, int A)
  {
    memset(memo, 0xff, sizeof(memo));
    return rec(1, 10, N, A);
  }

  int rec(int D, int F, int N, int A)
  {
    if( A==0 )     return N==0 ? 1 : 0;
    if( N < A )    return 0;
    if( N==1 )     return 10-D - (F==10 ? 0 : 1);
    if( 10-D < A ) return 0;
    if( memo[D][F][N][A] != -1 )
      return memo[D][F][N][A];

    long long ans = 0;
    for(int d=D; d<=9; ++d) if(d!=F)
      for(int k=2; k<=N; ++k)
        for(int q=0; d+(k-1)*q<=9; ++q)
          ans += rec(d+(k-1)*q, min(10, d+k*q), N-k, A-1);
    return memo[D][F][N][A] = int(ans % MODVAL);
  }
};
トラックバック - https://topcoder-g-hatena-ne-jp.jag-icpc.org/cafelier/20081224
 | 

presented by cafelier/k.inaba under CC0