CSES - BAPC 2017 - Results
Submission details
Task:Falling Apart
Sender:Antti Röyskö
Submission time:2017-10-24 18:41:01 +0300
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.04 sdetails
#2ACCEPTED0.04 sdetails
#3ACCEPTED0.04 sdetails
#4ACCEPTED0.04 sdetails
#5ACCEPTED0.04 sdetails
#6ACCEPTED0.04 sdetails
#7ACCEPTED0.03 sdetails
#8ACCEPTED0.03 sdetails
#9ACCEPTED0.04 sdetails
#10ACCEPTED0.03 sdetails
#11ACCEPTED0.04 sdetails
#12ACCEPTED0.03 sdetails
#13ACCEPTED0.03 sdetails

Code

#include <bits/stdc++.h>
using namespace std;
int t[1000];
int dp[1<<15];
int n;
int f(int x) {
	if(dp[x] != -1) return dp[x];
	int q = __builtin_popcount(x);
	if(q == n) return 0;
	int mi = 1e9;
	int ma = 0;
	for(int i = 0; i < n; ++i) {
		int z = 1<<i;
		if(x&z) continue;
		int w = f(x|z);
		mi = min(w, mi);
		ma = max(w+t[i], ma);
	}
	if(q % 2 == 0) { //alice
		dp[x] = ma;
	}
	else {
		dp[x] = mi;
	}
	return dp[x];
}
int main() {
	cin>>n;
	memset(dp, -1, sizeof dp);
	int sum = 0;
	for(int i = 0; i < n; ++i) {
		cin>>t[i];
		sum += t[i];
	}
	f(0);
	cout<<dp[0]<<' '<<sum-dp[0]<<endl;
}

Test details

Test 1

Verdict: ACCEPTED

input
15
100 100 100 100 100 100 100 10...

correct output
800 700

user output
800 700

Test 2

Verdict: ACCEPTED

input
15
87 100 99 98 91 97 96 95 94 93...

correct output
744 651

user output
744 651

Test 3

Verdict: ACCEPTED

input
1
1

correct output
1 0

user output
1 0

Test 4

Verdict: ACCEPTED

input
6
57 100 4 68 55 76

correct output
223 137

user output
223 137

Test 5

Verdict: ACCEPTED

input
1
70

correct output
70 0

user output
70 0

Test 6

Verdict: ACCEPTED

input
8
19 38 29 7 33 5 7 42

correct output
101 79

user output
101 79

Test 7

Verdict: ACCEPTED

input
5
62 16 21 23 28

correct output
101 49

user output
101 49

Test 8

Verdict: ACCEPTED

input
12
8 48 9 10 16 72 47 75 78 99 90...

correct output
334 305

user output
334 305

Test 9

Verdict: ACCEPTED

input
11
100 30 32 91 78 7 17 45 40 24 ...

correct output
279 211

user output
279 211

Test 10

Verdict: ACCEPTED

input
11
48 90 74 40 22 58 42 31 88 83 ...

correct output
368 304

user output
368 304

Test 11

Verdict: ACCEPTED

input
10
45 8 66 96 5 69 37 65 5 52

correct output
256 192

user output
256 192

Test 12

Verdict: ACCEPTED

input
7
78 13 66 50 94 6 76

correct output
226 157

user output
226 157

Test 13

Verdict: ACCEPTED

input
4
44 8 36 60

correct output
96 52

user output
96 52