250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 백준#BOJ#8012#한동이는영업사원
- 백준#boj#12755
- 백준#BOJ#14501#퇴사#브루트포스
- 백준#BOJ#2615#오목
- 백준#BOJ#1939#중량제한
- 백준#BOJ#12865#평범한배낭
- 백준#boj#16932#모양만들기
Archives
- Today
- Total
순간을 성실히, 화려함보단 꾸준함을
[ boj : 5557 ] 1학년 본문
5557번: 1학년
상근이가 1학년 때, 덧셈, 뺄셈을 매우 좋아했다. 상근이는 숫자가 줄 지어있는 것을 보기만 하면, 마지막 두 숫자 사이에 '='을 넣고, 나머지 숫자 사이에는 '+' 또는 '-'를 넣어 등식을 만들며 놀
www.acmicpc.net
문제 : 수들이 주어지고 사이에 +,- 만 넣어서 맨 마지막 수를 만들 수 있는 경우의 수를 구하시오
해설 : 점화식만 잘 짤수 있으면 쉽게 풀 수 있는 문제입니다.
매번 나오는 중복된 수들을 일일이 세는 것이 아닌 메모를 해둔다면 빠른시간안에 해결 할 수 있겠죠.
dp[i][j] = 이전 단계까지 연산된 결과값에 j번째 수를 +,- 했을때 i 가 나올 수 있는 경우의 수
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
ll arr[100];
ll dp[21][100];
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
for (int i = 0; i < n; i++)cin >> arr[i];
dp[arr[0]][0] = 1;
for(int i=1;i<n-1;i++)
for(int j=0;j<=20;j++)
if (dp[j][i - 1] > 0) {
if (0<= j+arr[i] && j + arr[i] <= 20)
dp[j + arr[i]][i] += dp[j][i - 1];
if (0 <= j - arr[i] && j - arr[i] <= 20)
dp[j - arr[i]][i] += dp[j][i - 1];
}
cout << dp[arr[n - 1]][n - 2];
return 0;
}
'알고리즘,SQL > 백준,BOJ' 카테고리의 다른 글
[ boj : 11084 ] 나이트의 염탐 (0) | 2021.04.05 |
---|---|
[ boj : 20164 ] 홀수 홀릭 호석 (0) | 2021.04.04 |
[ boj : 2806 ] DNA 발견 (0) | 2021.03.31 |
[ boj : 21278 ] 호석이 두 마리 치킨 (0) | 2021.03.27 |
[ boj : 1090 ] 체커 (0) | 2021.03.25 |