From e90f06ce735e41339641a0a7c65bf92508b5ca62 Mon Sep 17 00:00:00 2001 From: oncsr Date: Fri, 31 Oct 2025 22:06:39 +0900 Subject: [PATCH] =?UTF-8?q?[20251031]=20BOJ=20/=20P5=20/=20=EC=9D=B4?= =?UTF-8?q?=ED=98=BC=20/=20=EA=B6=8C=ED=98=81=EC=A4=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../31 BOJ P5 \354\235\264\355\230\274.md" | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 "khj20006/202510/31 BOJ P5 \354\235\264\355\230\274.md" diff --git "a/khj20006/202510/31 BOJ P5 \354\235\264\355\230\274.md" "b/khj20006/202510/31 BOJ P5 \354\235\264\355\230\274.md" new file mode 100644 index 00000000..8f7883f3 --- /dev/null +++ "b/khj20006/202510/31 BOJ P5 \354\235\264\355\230\274.md" @@ -0,0 +1,49 @@ +```cpp +#include +using namespace std; + +int N, arr[24]{}, ans = 0; +map le; + +void init() { + for(int i=0;i>arr[i]; + ans = 0; + le = map(); +} + +void fillLeft(int pos, int tar, int cur, int sum) { + le[cur] = max(le[cur], sum); + if(pos == tar) return; + fillLeft(pos+1, tar, cur, sum); + sum += arr[pos]; + fillLeft(pos+1, tar, cur+arr[pos], sum); + fillLeft(pos+1, tar, cur-arr[pos], sum); +} + +void checkRight(int pos, int tar, int cur, int sum) { + if(le.find(cur) != le.end()) ans = max(ans, le[cur] + sum); + if(pos == tar) return; + checkRight(pos+1, tar, cur, sum); + sum += arr[pos]; + checkRight(pos+1, tar, cur+arr[pos], sum); + checkRight(pos+1, tar, cur-arr[pos], sum); +} + +int solve() { + fillLeft(0,N>>1,0,0); + checkRight(N>>1,N,0,0); + int sum = 0; + for(int i=0;isync_with_stdio(0); + + for(cin>>N;N;cin>>N) { + init(); + cout<