티스토리 뷰
문제
문제요약:
말이 조금 어려워서 이해하기 힘들 수 있다. 문제에 필요한 정보만 써보면 다음과 같다.
Input으로는 차례대로 s와 d가 주어지는데 각각은 이득, 손해를 의미하는 변수다. 그리고 이 회사의 열두달 동안 어떤 달에 이득을 봤다면 무조건 그 달에는 +s만큼 이득을 본 것이고, 손해를 봤다면 -d만큼 손해를 본 것이다.
즉 어떤 달의 earning은 +s 혹은 -d일 수밖에 없다.
이 때 5월부터는 해당 월을 포함한 지난 다섯 달의 earning을 합친 report를 작성할 수 있다. 이 때 5월부터 12월까지 총 8개의 report를 작성할 수 있는데 이 회사의 모든 8개의 report는 음수여야 한다.
이런 조건을 만족하는 1년의 손해/이익표를 생각해볼 수 있을 것이다. 이 때 손익표에서 일 년 동안의 +s와 -d를 모두 더한 sum을 생각할 때 sum이 양수가 나올 수 있다면 그 값들 중 최댓값을 출력하고 양수가 불가능한 조건이면 Deficit을 출력하라
문제 풀이는 recursive backtracking으로 했다. 슬슬 이 방법에 대해서도 감이 잡히는 것 같다. 코드는 다음과 같다.
#include<iostream>
using namespace std;
int s, d;
//s: getting
//d: losing
int Month_earning[12]; //달에 얻은 금액을 메모하는 배열
int maxsum;
void backTracking(int c, int sum) {
// c: 몇번째 달까지 봤는가?(0~11)
// sum: 현재까지 총 이득과 적자를 더한 sum
if (c < 4) {//report는 5월부터 갱신된다.
Month_earning[c] = s;
backTracking(c + 1, sum + s);
Month_earning[c] = -d;
backTracking(c + 1, sum - d);
} //이때는 report를 생각할 필요 없음
else if (c == 12) { // 다 보고 온 경우(report조건을 만족하면서 complete case를 완성한 경우)
if (maxsum < sum) {
maxsum = sum;
}
}
else { //기본 case c=4~11
int report;
//가지치기->report값의 평가로 그 값이 양수면 더이상 진행할 필요가 없다.
Month_earning[c] = s;
report= Month_earning[c] + Month_earning[c - 1] + Month_earning[c - 2] + Month_earning[c - 3] + Month_earning[c - 4];
if(report<0) backTracking(c + 1, sum + s);
Month_earning[c] = -d;
report = Month_earning[c] + Month_earning[c - 1] + Month_earning[c - 2] + Month_earning[c - 3] + Month_earning[c - 4];
if(report<0) backTracking(c + 1, sum - d);
}
}
int main() {
while (cin >> s >> d) {
maxsum = 0;
backTracking(0, 0);
if (maxsum == 0) cout << "Deficit" << endl; //0원이득이나 손해를 본 경우 전부 DEFECIT
else cout << maxsum << endl;
}
}
어려운 문제는 아닌 것 같다.
'기초 알고리즘 문제 풀이' 카테고리의 다른 글
42. UVa-11057 Exact Sum // given v, find (a,b) s.t. a+b=v (0) | 2020.03.05 |
---|---|
41. UVa-10567 //Binary Search (0) | 2020.03.04 |
39. UVa-01047 Zones, <TLE> (0) | 2020.03.02 |
38. UVa-624 CD //Easy recursive Backtracking (0) | 2020.03.02 |
37. UVa-11236 Grocery Store //complex multi loop searching (2) | 2020.02.28 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 영상구조
- 머신러닝
- ML
- 이산 신호
- 인덱스 이미지
- 자연어 처리
- Neural Network
- 순환 신경망
- 컴퓨터과학
- RGB이미지
- Logistic Regression
- 머신 러닝
- NLP
- 매트랩
- rnn
- 영상처리
- 밑바닥부터 시작하는 딥러닝
- 이미지처리
- CNN
- CS
- 사진구조
- 이미지
- 매트랩 함수
- 딥러닝
- 컴퓨터 과학
- 신호 및 시스템
- gradient descent
- 신경망
- 연속 신호
- Andrew ng
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
글 보관함