728x90
5557번: 1학년
상근이가 1학년 때, 덧셈, 뺄셈을 매우 좋아했다. 상근이는 숫자가 줄 지어있는 것을 보기만 하면, 마지막 두 숫자 사이에 '='을 넣고, 나머지 숫자 사이에는 '+' 또는 '-'를 넣어 등식을 만들며 놀
www.acmicpc.net
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
Main m = new Main();
m.doit();
}
int N;
int arr[];
long dp[][];
public void doit() throws IOException{
//System.setIn(new FileInputStream("input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
arr = new int[N + 1];
dp = new long[N+1][21];
for(int i = 0; i < N+1; i++){
Arrays.fill(dp[i], -1);
}
String temp[] = br.readLine().split(" ");
for(int i = 1; i <= temp.length; i++){
arr[i] = Integer.parseInt(temp[i-1]);
}
// System.out.println(Arrays.toString(arr));
// for(int tc = 1; tc <= T; tc++){
//
// }
// printDp();
System.out.println(calc(2, arr[1]));
// printDp();
br.close();
}
long calc(int index, int sum){
if(sum < 0 || sum > 20){
return 0;
}
if(index == N){
if(sum == arr[index]){
return 1;
}else{
return 0;
}
}
long ret = dp[index][sum];
if(ret != -1){
return ret;
}
ret = 0;
ret += calc(index + 1, sum + arr[index]);
ret += calc(index + 1, sum - arr[index]);
dp[index][sum] = ret;
return ret;
}
void printDp(){
for(int i = 0; i < N+1; i++){
System.out.println(Arrays.toString(dp[i]));
}
System.out.println();
}
}
728x90
반응형
'IT 정보 > 알고리즘(백준, BOJ)' 카테고리의 다른 글
[백준-BOJ] 5585 (0) | 2021.04.07 |
---|---|
[백준-BOJ] 5565 (0) | 2021.03.02 |
[백준-BOJ] 5543 (0) | 2021.03.02 |
[백준-BOJ] 5373 (0) | 2021.03.02 |
[백준-BOJ] 5015 (0) | 2021.03.02 |