/*
プログラミングのお題スレ Part12
ttps://mevius.5ch.net/test/read.cgi/tech/1538096947/613
613 名前:デフォルトの名無しさん[sage] 投稿日:2018/11/21(水) 21:02:48.05 ID:fvygYhm9
お題
以下の操作を好きなだけ行う時、0をXにするまでに必要な最小コストを求めよ
・コスト1で値を1増減させる
・コストn+Yで値をn倍する
XとYは与えられ、0以上の整数であることが保証される
nは自然数の範囲で任意に決めて良い
例(X, Y)
1 3
20 2
63 2
出力
3
11
17
*/
class Ideone
{
public static void main
(String[] args
) {
System.
out.
println(calc
(1,
3)); System.
out.
println(calc
(20,
2)); System.
out.
println(calc
(63,
2)); }
static int calc(int x, int y)
{
int[] table = new int[x + 1];
for (int i = 1; i <= x; i++)
table[i] = i;
for (int i = 1; i <= x; i++)
{
if (table[i - 1] + 1 < table[i]) table[i] = table[i - 1] + 1;
for (int m = 2; i * m <= x; m++)
{
if (table[i] + m + y < table[i * m])
{
table[i * m] = table[i] + m + y;
}
}
}
return table[x];
}
}
LyoK44OX44Ot44Kw44Op44Of44Oz44Kw44Gu44GK6aGM44K544OsIFBhcnQxMiAKdHRwczovL21ldml1cy41Y2gubmV0L3Rlc3QvcmVhZC5jZ2kvdGVjaC8xNTM4MDk2OTQ3LzYxMwoKNjEzIOWQjeWJje+8muODh+ODleOCqeODq+ODiOOBruWQjeeEoeOBl+OBleOCk1tzYWdlXSDmipXnqL/ml6XvvJoyMDE4LzExLzIxKOawtCkgMjE6MDI6NDguMDUgSUQ6ZnZ5Z1lobTkK44GK6aGMCuS7peS4i+OBruaTjeS9nOOCkuWlveOBjeOBquOBoOOBkeihjOOBhuaZguOAgTDjgpJY44Gr44GZ44KL44G+44Gn44Gr5b+F6KaB44Gq5pyA5bCP44Kz44K544OI44KS5rGC44KB44KICuODu+OCs+OCueODiDHjgaflgKTjgpIx5aKX5rib44GV44Gb44KLCuODu+OCs+OCueODiG4rWeOBp+WApOOCkm7lgI3jgZnjgosKWOOBqFnjga/kuI7jgYjjgonjgozjgIEw5Lul5LiK44Gu5pW05pWw44Gn44GC44KL44GT44Go44GM5L+d6Ki844GV44KM44KLCm7jga/oh6rnhLbmlbDjga7nr4Tlm7Ljgafku7vmhI/jgavmsbrjgoHjgaboia/jgYQK5L6LKFgsIFkpCjEgMwoyMCAyCjYzIDIK5Ye65YqbCjMKMTEKMTcKKi8KY2xhc3MgSWRlb25lCnsKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICB7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNhbGMoMSwgMykpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjYWxjKDIwLCAyKSk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNhbGMoNjMsIDIpKTsKICAgIH0KICAgIAogICAgc3RhdGljIGludCBjYWxjKGludCB4LCBpbnQgeSkKICAgIHsKICAgICAgICBpbnRbXSB0YWJsZSA9IG5ldyBpbnRbeCArIDFdOwogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IHg7IGkrKykKICAgICAgICAgICAgdGFibGVbaV0gPSBpOwogICAgICAgIAogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IHg7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGlmICh0YWJsZVtpIC0gMV0gKyAxIDwgdGFibGVbaV0pIHRhYmxlW2ldID0gdGFibGVbaSAtIDFdICsgMTsKICAgICAgICAgICAgZm9yIChpbnQgbSA9IDI7IGkgKiBtIDw9IHg7IG0rKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKHRhYmxlW2ldICsgbSArIHkgPCB0YWJsZVtpICogbV0pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdGFibGVbaSAqIG1dID0gdGFibGVbaV0gKyBtICsgeTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gdGFibGVbeF07CiAgICB9Cn0=