-
[KOITP] 인접한 비트의 개수자료구조 및 알고리즘/문제풀이 2017. 1. 9. 19:09
출 처 : http://koitp.org/problem/ICPC_2009GNY_ADJACENTBIT/read/
시간 제한 메모리 제한 제출 횟수 정답 횟수 (비율) 정답자 수 1.0 초 512 MB 1241 648 (52%) 531 < Comment >
사실상 답을 보고 푼 것이나 마찬가지인 것 같습니다. 기본적으로 점화식은 세웠으나, 기저케이스에 대해 명확한 정의없이 진행하다보니 문제를 푸는데 오래 걸렸습니다.
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.StringTokenizer; public class BitFriends { public static int T = 0; public static int N = 0; public static int K = 0; public static int dp[][][] = null; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); T = Integer.parseInt(br.readLine()); int testCase = 0; for (int tc = 1 ; tc <= T ; tc++) { StringTokenizer st = new StringTokenizer(br.readLine()); testCase = Integer.parseInt(st.nextToken()); N = Integer.parseInt(st.nextToken()); K = Integer.parseInt(st.nextToken()); dp = new int[2][N+1][N+1]; for (int i = 1 ; i <= N ; i++) { dp[1][i][i-1] = 1; } dp[0][1][0] = 1; for (int i = 2 ; i <= N ; i++) { for (int j = 0 ; j < i; j++) { if (j == 0) { dp[0][i][j] = dp[0][i-1][j] + dp[1][i-1][j]; dp[1][i][j] = dp[0][i-1][j]; } else { dp[0][i][j] = dp[0][i-1][j] + dp[1][i-1][j]; dp[1][i][j] = dp[0][i-1][j] + dp[1][i-1][j-1]; } } } bw.write("" + testCase + " " + (dp[0][N][K] + dp[1][N][K]) + "\n"); bw.flush(); } bw.close(); } }