티스토리 뷰
문제
Input이 저렇게 주어질 때 저장용량에 들어갈 수 있는 곡들의 조합 중 가장 저장용량을 꽉 채울 수 있는 곡들의 조합과 그 용량을 출력하는 문제다.
이 문제는 Input의 크기가 작아서 그냥 recursive backtracking기법을 써서 완전탐색으로 풀었다. 근데 아직 재귀적 탐색이 익숙치가 않아서 별로 효율적이지 않을 수도 있다.
다음은 코드다.
#include<iostream>
using namespace std;
int maximum = 0;
int N, num_of_tracks;
int time_of_tracks[20];
int Choice[20];
int BestChoice[20];
int max_choice_num;
void Backtracking(int c, int num_of_choices, int curr_cap) { //c-1번 track까지는 이미 다 봤음
if (c == num_of_tracks) return; //더 이상 볼 게 없는 경우
//이제 c번째거도 가능하면 추가시키는 경우를 생각해보자.
//c+1번째 거를 추가 가능한지보자. 추가 가능한 경우에만 추가해서 진행하면 된다.
if (curr_cap + time_of_tracks[c] <= N) {
//추가 가능한 경우 Backtracking을 진행하되 max갱신을 하자
Choice[num_of_choices] = time_of_tracks[c];
if (curr_cap + time_of_tracks[c] > maximum) {
maximum = curr_cap + time_of_tracks[c];
max_choice_num = num_of_choices + 1;
//여기에 Choice를 BestChoice로써 메모하기
for (int i = 0; i < max_choice_num; i++) {
BestChoice[i] = Choice[i];
}
}
Backtracking(c + 1, num_of_choices + 1, curr_cap + time_of_tracks[c]);
}
Backtracking(c + 1, num_of_choices, curr_cap); //아무것도 안보고 진행시키는 경우
}
int main() {
while (cin >> N) {
cin >> num_of_tracks;
for (int i = 0; i < num_of_tracks; i++) cin >> time_of_tracks[i];
maximum = 0;
Backtracking(0, 0, 0);
for (int i = 0; i < max_choice_num; i++) {
cout << BestChoice[i] << " ";
}
cout << "sum:" << maximum << endl;
}
return 0;
}
if(curr_cap+time_of_tracks[c]<=N) 부분에서 가지치기를 한 번 수행하는 코드다. 참고로 이 문제는 Input의 크기가 작아서 완전탐색으로 풀어도 0.000초에 AC판정이 나온다..
'기초 알고리즘 문제 풀이' 카테고리의 다른 글
40. UVa-10576 Y2K Accounting Bug (0) | 2020.03.03 |
---|---|
39. UVa-01047 Zones, <TLE> (0) | 2020.03.02 |
37. UVa-11236 Grocery Store //complex multi loop searching (2) | 2020.02.28 |
36. UVa-10487 Closest Sums //nlogn solution (0) | 2020.02.28 |
35. UVa-1260 Sales (0) | 2020.02.27 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 컴퓨터 과학
- 컴퓨터과학
- 영상처리
- Logistic Regression
- 매트랩 함수
- 순환 신경망
- RGB이미지
- 신호 및 시스템
- 머신러닝
- gradient descent
- Neural Network
- Andrew ng
- ML
- 영상구조
- 이미지
- 사진구조
- 신경망
- 인덱스 이미지
- 매트랩
- 이미지처리
- 이산 신호
- 연속 신호
- CS
- 딥러닝
- 자연어 처리
- rnn
- 머신 러닝
- CNN
- 밑바닥부터 시작하는 딥러닝
- NLP
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함