/*
プログラミングのお題スレ 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
(3,
1)); 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;
int m = 2;
for (; i * m < x; m++)
{
int cost = table[i] + m + y;
for (int j = 0; cost + j < table[i * m - j]; j++)
{
table[i * m - j] = cost + j;
}
}
int cost = table[i] + m + y + i * m - x;
if (cost < table[x]) table[x] = cost;
}
return table[x];
}
}
LyoK44OX44Ot44Kw44Op44Of44Oz44Kw44Gu44GK6aGM44K544OsIFBhcnQxMiAKdHRwczovL21ldml1cy41Y2gubmV0L3Rlc3QvcmVhZC5jZ2kvdGVjaC8xNTM4MDk2OTQ3LzYxMwogCjYxMyDlkI3liY3vvJrjg4fjg5Xjgqnjg6vjg4jjga7lkI3nhKHjgZfjgZXjgpNbc2FnZV0g5oqV56i/5pel77yaMjAxOC8xMS8yMSjmsLQpIDIxOjAyOjQ4LjA1IElEOmZ2eWdZaG05CuOBiumhjArku6XkuIvjga7mk43kvZzjgpLlpb3jgY3jgarjgaDjgZHooYzjgYbmmYLjgIEw44KSWOOBq+OBmeOCi+OBvuOBp+OBq+W/heimgeOBquacgOWwj+OCs+OCueODiOOCkuaxguOCgeOCiArjg7vjgrPjgrnjg4gx44Gn5YCk44KSMeWil+a4m+OBleOBm+OCiwrjg7vjgrPjgrnjg4huK1njgaflgKTjgpJu5YCN44GZ44KLCljjgahZ44Gv5LiO44GI44KJ44KM44CBMOS7peS4iuOBruaVtOaVsOOBp+OBguOCi+OBk+OBqOOBjOS/neiovOOBleOCjOOCiwpu44Gv6Ieq54S25pWw44Gu56+E5Zuy44Gn5Lu75oSP44Gr5rG644KB44Gm6Imv44GECuS+iyhYLCBZKQoxIDMKMjAgMgo2MyAyCuWHuuWKmwozCjExCjE3CiovCmNsYXNzIElkZW9uZQp7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgewogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjYWxjKDEsIDMpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY2FsYygzLCAxKSk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNhbGMoMjAsIDIpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY2FsYyg2MywgMikpOwogICAgfQogICAgCiAgICBzdGF0aWMgaW50IGNhbGMoaW50IHgsIGludCB5KQogICAgewogICAgICAgIGludFtdIHRhYmxlID0gbmV3IGludFt4ICsgMV07CiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0geDsgaSsrKQogICAgICAgICAgICB0YWJsZVtpXSA9IGk7CiAgICAgICAgCiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0geDsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKHRhYmxlW2kgLSAxXSArIDEgPCB0YWJsZVtpXSkgdGFibGVbaV0gPSB0YWJsZVtpIC0gMV0gKyAxOwogICAgICAgICAgICBpbnQgbSA9IDI7CiAgICAgICAgICAgIGZvciAoOyBpICogbSA8IHg7IG0rKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaW50IGNvc3QgPSB0YWJsZVtpXSArIG0gKyB5OwogICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGNvc3QgKyBqIDwgdGFibGVbaSAqIG0gLSBqXTsgaisrKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRhYmxlW2kgKiBtIC0gal0gPSBjb3N0ICsgajsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaW50IGNvc3QgPSB0YWJsZVtpXSArIG0gKyB5ICsgaSAqIG0gLSB4OwogICAgICAgICAgICBpZiAoY29zdCA8IHRhYmxlW3hdKSB0YWJsZVt4XSA9IGNvc3Q7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiB0YWJsZVt4XTsKICAgIH0KfQ==