본문 바로가기

TIL

2022.10.13.TIL (알고리즘,못 품)

백준 문제풀이

2629번

https://www.acmicpc.net/problem/2629

 

2629번: 양팔저울

첫째 줄에는 추의 개수가 자연수로 주어진다. 추의 개수는 30 이하이다. 둘째 줄에는 추의 무게들이 자연수로 가벼운 것부터 차례로 주어진다. 같은 무게의 추가 여러 개 있을 수도 있다. 추의 무

www.acmicpc.net

배낭문제

 

재귀로 해결해야 함

사용한 추의 갯수와 추의 총 무게만 생각하여 만들 수 있는 무게들을 구함

추를 모두 사용했을 때 ture인지 false인지 확인

#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#include <stack>
#include <queue>
#include <algorithm>
using namespace std;
int weight;
int wss[30];
int ball;
int bs[7];

bool dp[31][15001] = { 0, };

void canMake(int n, int w) {
	if (n > weight || dp[n][w]) return;
	dp[n][w] = true;
	canMake(n + 1, w + wss[n]);//추를 오른쪽에 올림
	canMake(n + 1, abs(w - wss[n]));//추를 왼쪽에 올림
	canMake(n + 1, w);//추를 안씀
}

int main() {
	cin >> weight;
	for (int i = 0; i < weight; i++) cin >> wss[i];
	cin >> ball;
	for (int i = 0; i < ball; i++) cin >> bs[i];
	
	canMake(0, 0);

	for (int i = 0; i < ball; i++) {
		if (bs[i] > 15000) cout << "N ";
		else if (dp[weight][bs[i]]) cout << "Y ";
		else cout << "N ";
	}
}

'TIL' 카테고리의 다른 글

2022.11.08.TIL  (0) 2022.11.08
2022.10.06.TIL  (0) 2022.10.06
2022.10.04.TIL  (0) 2022.10.04
2022.09.21.TIL  (1) 2022.09.21
2022.09.20.TIL  (0) 2022.09.20