結果
| 問題 |
No.266 最終進化を目指せ
|
| コンテスト | |
| ユーザー |
izuru_matsuura
|
| 提出日時 | 2016-12-14 22:44:23 |
| 言語 | D (dmd 2.109.1) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 893 bytes |
| コンパイル時間 | 1,587 ms |
| コンパイル使用メモリ | 150,864 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-06-12 05:33:01 |
| 合計ジャッジ時間 | 2,558 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 24 |
ソースコード
import std.algorithm;
import std.array;
import std.ascii;
import std.container;
import std.conv;
import std.math;
import std.numeric;
import std.range;
import std.stdio;
import std.string;
import std.typecons;
void log(A...)(A arg) { stderr.writeln(arg); }
int size(T)(in T s) { return cast(int)s.length; }
void main() {
auto N = readln.chomp.to!int;
auto S = readln.chomp.split(" ").map!(to!int).array;
auto f = new int[][](N + 1, S[N] + 1);
int A = S[N];
foreach (ref L; f) L[] = int.max / 2;
f[0][0] = 1;
for (int n = 0; n <= N; n++) {
for (int a = 0; a <= S[n]; a++) {
if (n >= 1) f[n][a] = min(f[n][a], f[n - 1][a] + 1);
for (int j = 0; j <= a - 1; j++) {
f[n][a] = min(f[n][a], f[n][j] + f[n][a - j - 1]);
}
}
}
writefln("%(%s %)", f[N]);
//log(f.map!(to!string).join("\n"));
}
izuru_matsuura