https://www.acmicpc.net/problem/23057
๋ฌธ์
์ค๋์ ์ฆ๊ฑฐ์ด ์ถ์ ๋ ์ด๋ค.
๋ฐฑ๋จ์ด๋ ์ถ์ ์์ ๋ฌด์์ ํ ๊น ๋์๋ค๋๋ ์ค ๋์ ์ซ์์์ด๋ผ๋ ํ์ฌ๋ฅผ ๋ฐ๊ฒฌํ๊ณ 100๋ง์์ด๋ผ๋ ์๊ธ์ ํ๋ ค ๋ฐ๋ก ์ฐธ๊ฐํ์๋ค.
๋์ ์ซ์์์ N ๊ฐ์ ์ซ์ ์นด๋๋ฅผ ์กฐํฉํ์ฌ ๋ค์ํ ์๋ฅผ ๋ง๋๋ ๊ฒ์์ด๋ค.
์ด๋ฒ ๋ผ์ด๋์์๋ ์นด๋์ ์ ํ ์์ ํฉ์ผ๋ก ๋ง๋ค ์ ์๋ ์์ ๊ฐ์๋ฅผ ์ธ์น๋ฉด ์ด๊ธด๋ค.
๋ฐฑ๋จ์ด๊ฐ 1๋ฑ์ ํ์ฌ ์ถ์ ๋ฅผ ์ฆ๊ธธ ์ ์๋๋ก ๋์์ฃผ์.
์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์๋ ์นด๋์ ๊ฐ์ N (1≤N≤20 )์ด ์ฃผ์ด์ง๋ค.
๋ ๋ฒ์งธ ์ค์๋ N ๊ฐ์ ์๊ฐ ์ฃผ์ด์ง๋ค.
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ์๋ 100,000,000 ์ดํ์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
๋ชจ๋ ์นด๋์ ์ ํ ์์ ํฉ์ M ์ด๋ผ๊ณ ํ ๋, 1 ์ด์ M ์ดํ์ ์์ฐ์ ์ค ๋ง๋ค ์ ์๋ ์์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
ํ์ด
๋ฐฑํธ๋ํน์ผ๋ก ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ค
// ํ์ด : https://whkakrkr.tistory.com
#include <iostream>
#include <vector>
#include <set>
using namespace std;
int n, m;
vector<int> input;
set<int> result;
void recur(int k, int sum) {
if(k==n) {
result.insert(sum);
return;
}
// k๋ฒ ์นด๋ ํฌํจ
recur(k+1, sum+input[k]);
// ๋ถํฌํจ
recur(k+1, sum);
}
int main() {
// ์
๋ ฅ
cin >> n;
input.assign(n, 0);
for(int i=0; i<n; i++) {
cin >> input[i];
m += input[i];
}
// ๋ฐฑํธ๋ํน
recur(0, 0);
// ๋ง๋ค ์ ์๋ ์์ ๊ฐฏ์
int canMake = result.size()-1; // ํ๋๋ ์ ํํ์ง ์์ ๊ฒฝ์ฐ ์ ์ธ
cout << m - canMake;
return 0;
}
'๐๏ธ ICPC Sinchon > Backtracking' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 14501๋ฒ: ํด์ฌ (1) | 2024.11.15 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 9997๋ฒ: ํฐํธ (0) | 2024.10.16 |
[BOJ][C++] ๋ฐฑ์ค 1497๋ฒ: ๊ธฐํ์ฝ์ํธ (0) | 2024.08.17 |
[BOJ][C++] ๋ฐฑ์ค 1759๋ฒ: ์ํธ ๋ง๋ค๊ธฐ (0) | 2023.11.22 |
[BOJ][C++] ๋ฐฑ์ค 14888๋ฒ: ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ (0) | 2023.07.06 |