//
// main.cpp
// algorithm_practice
//
// Created by 김동환 on 2020/04/12.
// Copyright © 2020 김동환. All rights reserved.
//
#include <iostream>
#include <vector>
using namespace std;
int n,k;
int dp[100001] = {0};
vector<int> vec;
int main(){
//freopen("input.txt","r", stdin);
cin >> n >> k;
//cout << n << " "<< k << "\n";
for(int i=0;i<n;i++){
int tmp;
cin >> tmp;
vec.push_back(tmp);
}
dp[0] = 1;
for(int j=0;j<vec.size();j++){
for(int i=0;i<=k;i++){
int w = i - vec[j];
if(w > 0){
dp[i] = min(dp[w]+1,dp[i]);
}
}
}
//cout << dfs(10,0) <<"\n";
if (dp[k] != 0)
cout << dp[k] <<"\n";
else{
cout << -1 << "\n";
}
return 0;
}
이렇게 하면 될거같았는데, 안되네;
//
// main.cpp
// algorithm_practice
//
// Created by 김동환 on 2020/04/12.
// Copyright © 2020 김동환. All rights reserved.
//
#include <iostream>
#include <vector>
#define NUM 100001
using namespace std;
int n,k;
int dp[100001] = {0};
vector<int> vec;
int main(){
//freopen("input.txt","r", stdin);
for(int i=0;i<NUM;i++){
dp[i] = 987654321;
}
cin >> n >> k;
//cout << n << " "<< k << "\n";
for(int i=0;i<n;i++){
int tmp;
cin >> tmp;
vec.push_back(tmp);
}
dp[0] = 0;
for(int j=0;j<vec.size();j++){
for(int i=0;i<=k;i++){
int w = i - vec[j];
if(w >= 0){
dp[i] = min(dp[w]+1,dp[i]);
}
}
}
//cout << dp[15] << "\n";
//cout << dfs(10,0) <<"\n";
if (dp[k] != 987654321)
cout << dp[k] <<"\n";
else{
cout << -1 << "\n";
}
return 0;
}
아 이거다 k>0으로 했었어서 값이 계산이 제대로 안됬다. 이제 스위프트로 짜보자 ㅋㅋ
'알고리즘 문제 풀기' 카테고리의 다른 글
<스위프트&알고리즘> 10818번 최소, 최대 (0) | 2020.04.16 |
---|---|
<스위프트&알고리즘> 못풀음, 동전2 2294번 (0) | 2020.04.16 |
<알고리즘 문제> 해설 보면 안됐는데;, 중요 , 백준 동전1 2293번 (0) | 2020.04.12 |
<부분합 문제?> 다양한 종류의 냅색 문제?부분합?에 대한 이해를 해보자. (0) | 2020.04.08 |
<백준> 11400번 단절선, 이중 연결 요소. (0) | 2020.04.04 |