結果
問題 | No.161 制限ジャンケン |
ユーザー |
![]() |
提出日時 | 2015-03-06 00:28:51 |
言語 | Java (openjdk 23) |
結果 |
AC
|
実行時間 | 180 ms / 5,000 ms |
コード長 | 3,133 bytes |
コンパイル時間 | 2,379 ms |
コンパイル使用メモリ | 78,564 KB |
実行使用メモリ | 65,088 KB |
最終ジャッジ日時 | 2024-11-30 04:27:19 |
合計ジャッジ時間 | 4,425 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 16 |
ソースコード
import java.io.IOException;import java.util.Arrays;import java.util.InputMismatchException;public class Main {char[] s;int[][][] dp;int[][] score;int dp(int k, int g, int c) {if (s.length <= k) {return 0;}if (0 <= dp[k][g][c]) {return dp[k][g][c];}int res = 0;if (0 < g) {res = Math.max(res, dp(k + 1, g - 1, c) + score['G'][s[k]]);}if (0 < c) {res = Math.max(res, dp(k + 1, g, c - 1) + score['C'][s[k]]);}if (0 < s.length - g - c - k) {res = Math.max(res, dp(k + 1, g, c) + score['P'][s[k]]);}return dp[k][g][c] = res;}void run() {MyScanner sc = new MyScanner();score = new int['Z']['Z'];score['G']['G'] = 1;score['G']['C'] = 3;score['G']['P'] = 0;score['C']['G'] = 0;score['C']['C'] = 1;score['C']['P'] = 3;score['P']['G'] = 3;score['P']['C'] = 0;score['P']['P'] = 1;int g = sc.nextInt();int c = sc.nextInt();int p = sc.nextInt();s = sc.next().toCharArray();dp = new int[s.length][g + 1][c + 1];for (int i = 0; i < s.length; i++) {for (int j = 0; j < g + 1; j++) {Arrays.fill(dp[i][j], -1);}}System.out.println(dp(0, g, c));}public static void main(String[] args) {new Main().run();}public void mapDebug(int[][] a) {System.out.println("--------map display---------");for (int i = 0; i < a.length; i++) {for (int j = 0; j < a[i].length; j++) {System.out.printf("%3d ", a[i][j]);}System.out.println();}System.out.println("----------------------------" + '\n');}class MyScanner {int read() {try {return System.in.read();} catch (IOException e) {throw new InputMismatchException();}}boolean isSpaceChar(int c) {return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;}boolean isEndline(int c) {return c == '\n' || c == '\r' || c == -1;}int nextInt() {return Integer.parseInt(next());}int[] nextIntArray(int n) {int[] array = new int[n];for (int i = 0; i < n; i++)array[i] = nextInt();return array;}long nextLong() {return Long.parseLong(next());}long[] nextLongArray(int n) {long[] array = new long[n];for (int i = 0; i < n; i++)array[i] = nextLong();return array;}double nextDouble() {return Double.parseDouble(next());}double[] nextDoubleArray(int n) {double[] array = new double[n];for (int i = 0; i < n; i++)array[i] = nextDouble();return array;}String next() {int c = read();while (isSpaceChar(c))c = read();StringBuilder res = new StringBuilder();do {res.appendCodePoint(c);c = read();} while (!isSpaceChar(c));return res.toString();}String[] nextStringArray(int n) {String[] array = new String[n];for (int i = 0; i < n; i++)array[i] = next();return array;}String nextLine() {int c = read();while (isEndline(c))c = read();StringBuilder res = new StringBuilder();do {res.appendCodePoint(c);c = read();} while (!isEndline(c));return res.toString();}}}