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 |