链接:http://codeforces.com/contest/1070
题意:求出最小的正整数,使它满足数位和为s,且可以被d整除
一道不错的题。。
这个显然可以把(d,s)作为状态来存,可是数字太大存不下,但是存个长度还是可以的,然后直接做bfs之后就可以得到目标数字的长度了。。然而这个数字没办法确定,因为转移的时候不能把之前的决策方案存下来,即当前状态的高位数字我们并不知道,这样导致了在位数相同的时候我们无法确定数字的大小关系,在bfs的过程中就无法保存最优状态。。
然而还是能求出长度的,这给解决问题带来了一定的便利。。
仔细思考可以发现,通过bfs,我们已经把上面的所有状态给建成了一个分层图,即当前状态只能往长度比他大1的状态进行转移。。那么可以从高位开始贪心,然后直接做dfs,然而这个代价貌似还是很大。。其实如果当前的贪心策略能到达目标状态(0,s),那么这个一定是最优状态,如果不行,说明我们从这个状态出发经过的dfs树都不能到达目标状态,那么只需记忆化标记一下就可以了。。最多标记次数不超过d*s。。
因此总复杂度为O(ds)
A. Find a Number
time limit per test
3 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
You are given two positive integers d
and s. Find minimal positive integer n which is divisible by d and has sum of digits equal to s
.
Input
The first line contains two positive integers d
and s (1≤d≤500,1≤s≤5000
) separated by space.
Output
Print the required number or -1 if it doesn't exist.
Examples
Input
Copy
13 50
Output
Copy
699998
Input
Copy
61 2
Output
Copy
1000000000000000000000000000001
Input
Copy
15 50
Output
Copy
-1