https://www.acmicpc.net/problem/5557
5557번: 1학년
문제 상근이가 1학년 때, 덧셈, 뺄셈을 매우 좋아했다. 상근이는 숫자가 줄 지어있는 것을 보기만 하면, 마지막 두 숫자 사이에 '='을 넣고, 나머지 숫자 사이에는 '+' 또는 '-'를 넣어 등식을 만들��
www.acmicpc.net
[문제 풀이]
DP를 이용하여 문제를 풀었습니다.
1부터 N까지 받은 후에 2부터 N-1까지 돌면서 dp[i][j]에 먼저 체크해주었습니다. 상근이는 0~20까지의 숫자까지만 알기 때문에 j를 21로 크기를 선언하고 - +가 범위를 벗어나는지 보고 벗어나면 무시하고 아니면 더하는 식으로 했습니다.
[코드]
#include<iostream>
using namespace std;
int N;
int arr[101] = { 0, };
long long dp[101][21] = { 0, };
int main() {
scanf("%d", &N);
for (int i = 1; i <= N; i++)
scanf("%d", &arr[i]);
dp[1][arr[1]]++;
for (int i = 2; i < N; i++) {
for (int j = 0; j <= 20; j++) {
if (dp[i - 1][j] != 0) {
if (j - arr[i] >= 0) {
dp[i][j - arr[i]] += dp[i - 1][j];
}
if (j + arr[i] <= 20) {
dp[i][j + arr[i]] += dp[i - 1][j];
}
}
}
}
printf("%lld\n", dp[N - 1][arr[N]]);
return 0;
}
'algorithm > BOJ' 카테고리의 다른 글
백준 10942_팰린드롬?(C++) (0) | 2020.06.28 |
---|---|
백준 14889_랜선 자르기(C++) (0) | 2020.06.07 |
백준 12865_평범한 배낭(C++) (0) | 2020.05.27 |
백준 14500_테트로미노(C++) (2) | 2020.04.29 |
백준 11053_가장 긴 증가하는 부분 수열(C++) (0) | 2020.04.28 |