(백준/ C++) 2629 - 양팔저울📃 coding test/◽ 백준2024. 7. 9. 18:05
Table of Contents
728x90
"(백준/ C++) 2629 - 양팔저울"
https://www.acmicpc.net/problem/2629
아마 .. 양팔저울 문제 설명에 냅색 알고리즘으로 푸는 문제라고 적혀 있지 않으면 오랫동안 못 풀었을거 같다.. ^^;;
냅색과 같이 나올수 있는 무게의 경우를 만드는 방식으로 풀이를 했다.
점화식은 (가)저울에만 추를 둘수 있다고 생각 하고 경우의 수를 고려하였다.
- (가)에 A추가 있는 경우 → (가) A추 + 구슬 = (나) B추 → (가) 구슬 = (나) B추 - A추
- (나)에 A추가 있는 경우 → (가) 구슬 = (나) B추 + A추
- (가), (나)에 A추가 모두 없는 경우 → (가) 구슬 = (나) B추
처음에는 이분탐색으로 찾으려 했으나 메모리 문제로 실패 ! DP[비교대상개수][무게]로 풀자!
#include <iostream>
#include <vector>
#include <algorithm>
#include<cmath>
using namespace std;
int gN, gTC;
int gWeight[31];
//vector<int> gAllSum;
bool dp[31][15001];
void DFS(int pParm01, int pParm02)
{
if (pParm01 > gN || dp[pParm01][pParm02])
{
return;
}
dp[pParm01][pParm02] = true;
DFS(pParm01 + 1, pParm02);
DFS(pParm01 + 1, abs(pParm02 - gWeight[pParm01]));
DFS(pParm01 + 1, pParm02 + gWeight[pParm01]);
}
int main(void)
{
cin >> gN;
for (int idx = 0; idx < gN; ++idx)
{
cin >> gWeight[idx];
}
DFS(0, 0);
//std::sort(gAllSum.begin(), gAllSum.end());
cin >> gTC;
for (int idx = 0; idx < gTC; ++idx)
{
int mTc;
cin >> mTc;
if (mTc > 15'000)
{
cout << "N";
}
else if (dp[gN][mTc])
{
cout << "Y";
}
else
{
cout << "N";
}
}
return 0;
}
728x90
'📃 coding test > ◽ 백준' 카테고리의 다른 글
(백준/ C++) 7579 - 앱 / 다이나믹 프로그래밍 (0) | 2024.07.12 |
---|---|
(백준/ C++) 1106 - 호텔 / 다이나믹 프로그래밍 (0) | 2024.07.11 |
(백준/ C++) 11438 - LCA 2 / 효율적인 LCA(+sparse table) (0) | 2023.02.02 |
(백준/C++) 가장 긴 증가하는 부분 수열 1(11053), 2(12015), 3(12738), 4(14002), 5(14003) 모두 풀기 (0) | 2023.01.18 |
(백준/ C++) 1450 - 냅색문제, 이분 탐색 완전 탐색 그려보자! (0) | 2023.01.12 |
@핑크코냥 :: 핑크코냥
안 하는 것 보다 낫겠지
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!