๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/CodeUp

3510 : ์˜ˆ์‚ฐ ๊ด€๋ฆฌ

by ์•ˆ์ฃผํ˜• 2022. 1. 16.

๋ฌธ์ œ

 

์˜ˆ์‚ฐ ๊ด€๋ฆฌ

์ฒซ์งธ ์ค„์— ๋‚จ์€ ์˜ˆ์‚ฐ(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๋ฐ–์— ๋˜์ง€ ์•Š์•„์„œ ๋ฐฑํŠธ๋ž™ํ‚น์œผ๋กœ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€