본문 바로가기
알고리즘/백준

백준 2294 동전 2 C++

by ash9river 2024. 9. 30.

 

간단한 해설

 

1차원 dp로 해결

 

밑이랑 비슷한 방식

 

백준 1106 호텔 C++

2차원 dp로 할려다가, 기존의 배낭문제처럼 최댓값을 이어서 받는 것은 고객 수의 idx가 배수가 아닐 경우, 문제가 생겨서 1차원 dp로 해결하였다. 주석을 상세히 다시 달아보았다. 적어도 c명 이상

ash9river.tistory.com

 

 

 

 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
	cin.tie(0);
	ios_base::sync_with_stdio(0);
	int n,k;
	cin>>n>>k;
	vector<int> v(n);
	for(int i=0;i<n;++i){
		cin>>v[i];
	}
	sort(v.begin(),v.end());
	vector<int> dp(k+1,987654321);
	for(int i=0;i<n;++i){
		if(v[i]>k) continue;
		dp[v[i]]=1;
		for(int j=2*dp[i];j<=k;j+=dp[i]){
			dp[j]=min(dp[j],dp[j-dp[v[i]]]+1);
		}
	}
	for(int i=0;i<=k;++i){
		for(int j=0;j<=i;++j){
			dp[i]=min(dp[i],dp[i-j]+dp[j]);
		}
	}
	if(dp[k]==987654321) dp[k]=-1;
	cout<<dp[k];
}

'알고리즘 > 백준' 카테고리의 다른 글

백준 1956 운동 C++  (0) 2024.10.06
백준 17069 파이프 옮기기 2 C++  (2) 2024.10.02
백준 14502 연구소 C++  (4) 2024.09.26
백준 17141 연구소 2 c++  (0) 2024.09.25
백준 17485 진우의 달 여행 (Large) C++  (0) 2024.09.25