Notice
Recent Posts
Recent Comments
Link
거의 알고리즘 일기장
백준 12865번 _ 평범한 배낭 본문
https://www.acmicpc.net/problem/12865
풀이방법
그냥 냅색 알고리즘이다.
dp[가방종류][무게] = 가질수있는 최대가치
이렇게 dp를 설정해두고, dp[i][j] = max(dp[i][j] = max(dp[i][j], dp[i - 1][j - weight] + value) 이 점화식을 이용해 풀면된다.
for (int i = 1; i <= N; i++)
{
int weight = W[i];
int value = V[i];
for (int j = 1; j <= K; j++)
{
dp[i][j] = dp[i - 1][j];
if (j - weight >= 0)
dp[i][j] = max(dp[i][j], dp[i - 1][j - weight] + value);
}
}
전체코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int dp[101][100001];
int W[101];
int V[101];
int N, K;
void Input()
{
cin >> N >> K;
for (int i = 1; i <= N; i++)
{
cin >> W[i] >> V[i];
}
}
void solve()
{
for (int i = 1; i <= N; i++)
{
int weight = W[i];
int value = V[i];
for (int j = 1; j <= K; j++)
{
dp[i][j] = dp[i - 1][j];
if (j - weight >= 0)
dp[i][j] = max(dp[i][j], dp[i - 1][j - weight] + value);
}
}
cout << dp[N][K];
}
int main()
{
Input();
solve();
return 0;
}
후기
4달전에 풀었던 dp문제인데 다르게 dp 일차원 배열로 풀려다가 머리아파서 그냥 똑같은 방식으로 풀었다. 이게 메모리를 더 많이 잡아먹긴하지만 구현하긴 쉬운것같다.ㅎ
반응형
'알고리즘 문제풀이' 카테고리의 다른 글
백준 11055, 1149 (0) | 2020.05.10 |
---|---|
백준 16500번 _ 문자열 판별 (0) | 2020.05.10 |
백준 11051번 _ 이항 계수2 (0) | 2020.05.09 |
백준 11057번 _ 오르막 수 (0) | 2020.05.09 |
백준 10844번 _ 쉬운 계단 수 (0) | 2020.05.09 |
Comments