반응형

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

 

1535번: 안녕

첫째 줄에 사람의 수 N(≤ 20)이 들어온다. 둘째 줄에는 각각의 사람에게 인사를 할 때, 잃는 체력이 1번 사람부터 순서대로 들어오고, 셋째 줄에는 각각의 사람에게 인사를 할 때, 얻는 기쁨이 1번

www.acmicpc.net

 

배낭 문제와 동일한 풀이였습니다.

체력은 100이지만 0이 되면 죽으므로, 99라고 잡아주었습니다.

 

#include <iostream>
#include <algorithm>
#define MAX 20
using namespace std;

int n, a[MAX], b[MAX], dp[100] = { 0 };
int main() {
	scanf("%d", &n);
	for (int i = 0; i < n; i++) scanf("%d", &a[i]);
	for (int i = 0; i < n; i++) scanf("%d", &b[i]);
	for (int i = 0; i < n; i++) {
		for (int j = 99; j >= a[i]; j--) {
			dp[j] = max(dp[j], dp[j - a[i]] + b[i]);
		}
	}
	printf("%d", dp[99]);
}
반응형

+ Recent posts