結果

問題 No.41 貯金箱の溜息(EASY)
ユーザー myantamyanta
提出日時 2017-05-04 23:03:50
言語 C++11
(gcc 11.4.0)
結果
TLE  
実行時間 -
コード長 644 bytes
コンパイル時間 352 ms
コンパイル使用メモリ 44,252 KB
実行使用メモリ 8,784 KB
最終ジャッジ日時 2023-10-12 08:11:41
合計ジャッジ時間 6,968 ms
ジャッジサーバーID
(参考情報)
judge12 / judge13
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 14 ms
8,784 KB
testcase_01 TLE -
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<cstdio>
#include<vector>


using namespace std;

using ll=long long;


vector<vector<int> > dp;


ll mod(ll x)
{
	return x%1000000009;
}


int min(int a, int b)
{
	if(a<b) return a;
	return b;
}


int solve(int md, int d)
{
	int i, imax;
	ll ret=0;

	if(d==0) return 1;
	if(dp[md][d]>=0) return dp[md][d];

	imax=md/d;
	for(i=0;i<=imax;i++)
	{
		ret+=solve(md-i*d, d-1);
	}
	return dp[md][d]=mod(ret);
}


int main(void)
{
	int t;

	dp.resize(90001);
	for(int i=dp.size()-1;i>=0;i--) dp[i].resize(10, -1);

	scanf("%d", &t);
	for(int i=0;i<t;i++)
	{
		ll m;

		scanf("%lld", &m);
		printf("%d\n", solve(m/111111, 9));
	}

	return 0;
}
0