提出 #15892946


ソースコード 拡げる

import java.util.*;

public class Main {

	public static void main(String args[]) {
		Scanner sc = new Scanner(System.in);
		String s = sc.next();
		String t = sc.next();
		Lcs(s.toCharArray(), t.toCharArray());
	}

	public static void Lcs(char[] s, char[] t) {
		int[][] dp = new int[s.length + 1][t.length + 1];
		helper(s, t, dp, s.length, t.length);
		StringBuilder sb = new StringBuilder("");
		dfs(dp, s, t, s.length, t.length, sb);
		System.out.println(sb);
	}

	private static void dfs(int[][] dp, char[] s, char[] t, int i, int j, StringBuilder result) {
		if (i == 0 || j == 0)
			return;
		if (s[i - 1] == t[j - 1]) {
			dfs(dp, s, t, i - 1, j - 1, result);
			result.append(s[i - 1]);
			return;
		}
		if (dp[i - 1][j] == dp[i][j]) {
			dfs(dp, s, t, i - 1, j, result);
			return;
		} else {
			dfs(dp, s, t, i, j - 1, result);
			return;
		}
	}

	private static int helper(char[] s, char[] t, int[][] dp, int i, int j) {
		if (i == 0 || j == 0) {
			return 0;
		}
		if (dp[i][j] != 0) {
			return dp[i][j];
		}
		if (s[i - 1] == t[j - 1]) {
			dp[i][j] = 1 + helper(s, t, dp, i - 1, j - 1);
		} else {
			dp[i][j] = Math.max(helper(s, t, dp, i - 1, j), helper(s, t, dp, i, j - 1));
		}
		return dp[i][j];
	}
}

提出情報

提出日時
問題 F - LCS
ユーザ nachik
言語 Java (OpenJDK 11.0.6)
得点 0
コード長 1274 Byte
結果 TLE
実行時間 2209 ms
メモリ 87448 KiB

ジャッジ結果

セット名 All
得点 / 配点 0 / 100
結果
AC × 15
TLE × 3
セット名 テストケース
All 0_00, 0_01, 0_02, 0_03, 1_00, 1_01, 1_02, 1_03, 1_04, 1_05, 1_06, 1_07, 1_08, 1_09, 1_10, 1_11, 1_12, 1_13
ケース名 結果 実行時間 メモリ
0_00 AC 106 ms 35368 KiB
0_01 AC 103 ms 35472 KiB
0_02 AC 100 ms 35320 KiB
0_03 AC 100 ms 35452 KiB
1_00 AC 113 ms 35500 KiB
1_01 AC 108 ms 35308 KiB
1_02 AC 158 ms 85284 KiB
1_03 TLE 2209 ms 87132 KiB
1_04 TLE 2209 ms 87352 KiB
1_05 TLE 2209 ms 87220 KiB
1_06 AC 156 ms 85348 KiB
1_07 AC 238 ms 87040 KiB
1_08 AC 276 ms 87092 KiB
1_09 AC 273 ms 87140 KiB
1_10 AC 261 ms 87212 KiB
1_11 AC 272 ms 87180 KiB
1_12 AC 264 ms 87404 KiB
1_13 AC 258 ms 87448 KiB