結果
| 問題 |
No.41 貯金箱の溜息(EASY)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2014-10-17 00:06:46 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,170 bytes |
| コンパイル時間 | 533 ms |
| コンパイル使用メモリ | 55,256 KB |
| 実行使用メモリ | 12,416 KB |
| 最終ジャッジ日時 | 2024-12-30 09:23:52 |
| 合計ジャッジ時間 | 11,126 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 1 TLE * 1 |
ソースコード
#include <iostream>
#include <cstring>
using namespace std;
typedef long long ll;
#define REP(i, n) for(int(i)=0;(i)<(n);++(i))
int MOD = 1000000009;
int dp[10][100000];
#if 0
int solve(ll N){
memset(dp, 0, sizeof(dp));
dp[0][0] = 1;
for(int i = 1; i <= 9; i++){
for(int j = 0; j <= N; j++){
for(int k = 0; k <= N; k++){
if(j+k*i > N) break;
dp[i][j+k*i] = (dp[i][j+k*i] + dp[i-1][j]) % MOD;
}
}
}
int result = 0;
for(int i = 0; i <= N; i++){
result = (result + dp[9][i]) % MOD;
}
return result;
}
#endif
int memo[10][100000];
int dfs(ll N, int i){
int result = 0;
if(i >= 10) return 1;
if(memo[i][N] >= 0) return memo[i][N];
for(int j = 0; j <= N; j += i){
result = (result + dfs(N-j, i+1)) % MOD;
}
return memo[i][N] = result;
}
int solve(ll N){
memset(memo, -1, sizeof(memo));
return dfs(N, 1);
}
int main(){
int T;
cin >> T;
REP(i,T){
ll N;
cin >> N;
cout << solve(N/111111) << endl;
}
return 0;
}