Algorithm πŸ§‘πŸ»‍πŸ’»/CodeUp

3510 : μ˜ˆμ‚° 관리

dkswnkk 2022. 1. 16. 23:58

문제

 

μ˜ˆμ‚° 관리

첫째 쀄에 남은 μ˜ˆμ‚°(B)κ°€ μž…λ ₯λœλ‹€. ( 10 <= B <= 35,000 ) λ‘˜μ§Έ 쀄에 μ˜ˆμ‚°μ„ μ‚¬μš©ν•  수 μžˆλŠ” ν™œλ™μ˜ 수(N)이 μž…λ ₯λœλ‹€. (1 <= N <= 21 ) μ…‹μ§Έ 쀄에 곡백을 κΈ°μ€€μœΌλ‘œ N개의 ν™œλ™λΉ„κ°€ μ–‘μ˜ μ •μˆ˜λ‘œ μž…λ ₯λœλ‹€.

codeup.kr

μ½”λ“œ

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

vector<int>v;
int B,N,ans;

void backtracking(int sum,int index){
    if(sum>B) return;
    ans= max(ans,sum);
    for(int i=index+1; i<N; i++){
        if(sum+v[i]>B) continue;
        backtracking(sum+v[i], i);
    }
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    cin>>B;
    cin>>N;
    
    for(int i=0; i<N; i++){
        int inp; cin>>inp;
        v.push_back(inp);
    }
    
    sort(v.begin(),v.end(),greater<>());
    for(int i=0; i<N; i++){
        backtracking(v[i], i);
    }
   
    cout<<ans;
}

 

풀이

μ²˜μŒμ— 냅색 λ¬Έμ œμΈκ°€ μ‹Άμ—ˆμ§€λ§Œ N이 21밖에 λ˜μ§€ μ•Šμ•„μ„œ λ°±νŠΈλž™ν‚ΉμœΌλ‘œ ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.