結果
問題 |
No.771 しおり
|
ユーザー |
![]() |
提出日時 | 2021-05-14 11:30:11 |
言語 | C#(csc) (csc 3.9.0) |
結果 |
TLE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 2,004 bytes |
コンパイル時間 | 814 ms |
コンパイル使用メモリ | 107,520 KB |
実行使用メモリ | 151,092 KB |
最終ジャッジ日時 | 2024-10-01 15:07:44 |
合計ジャッジ時間 | 23,103 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 42 TLE * 1 |
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc) Copyright (C) Microsoft Corporation. All rights reserved.
ソースコード
using static System.Math; using System.Linq; using System.Collections.Generic; using System; public class P { public int ended { get; set; } public int pre { get; set; } } public class Hello { public static int n; static void Main() { n = int.Parse(Console.ReadLine().Trim()); var input = new int[n, 2]; for (int i = 0; i < n; i++) { string[] line = Console.ReadLine().Trim().Split(' '); input[i, 0] = int.Parse(line[0]); input[i, 1] = int.Parse(line[1]); } getAns(input); } static int[,] makeArray(int[,] input) { var res = new int[n, n]; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) if (i != j) res[i, j] = input[i, 1] - input[i, 0] + input[j, 0]; return res; } static void getAns(int[,] input) { var aa = makeArray(input); var imax = 1 << n; var dp = new int[imax, n]; for (int i = 0; i < imax; i++) for (int j = 0; j < n; j++) dp[i, j] = int.MaxValue; var q = new Queue<P>(); for (int i = 0; i < n; i++) { var t = 1 << i; dp[t, i] = 0; q.Enqueue(new P { ended = t, pre = i }); } while (q.Count() > 0) { var w = q.Dequeue(); for (int i = 0; i < n; i++) { if (((w.ended >> i) & 1) == 0) { var ndp = Max(dp[w.ended, w.pre], aa[w.pre, i]); var nended = (w.ended | (1 << i)); if (ndp < dp[nended, i]) { dp[nended, i] = ndp; q.Enqueue(new P { ended = nended, pre = i }); } } } } var ans = int.MaxValue; for (int i = 0; i < n; i++) ans = Min(ans, dp[imax - 1, i]); Console.WriteLine(ans); } }