Submission #2090549
Source Code Expand
#include<bits/stdc++.h>
using namespace std;
void rd(int &x){
int k, m=0;
x=0;
for(;;){
k = getchar_unlocked();
if(k=='-'){
m=1;
break;
}
if('0'<=k&&k<='9'){
x=k-'0';
break;
}
}
for(;;){
k = getchar_unlocked();
if(k<'0'||k>'9'){
break;
}
x=x*10+k-'0';
}
if(m){
x=-x;
}
}
void rd(long long &x){
int k, m=0;
x=0;
for(;;){
k = getchar_unlocked();
if(k=='-'){
m=1;
break;
}
if('0'<=k&&k<='9'){
x=k-'0';
break;
}
}
for(;;){
k = getchar_unlocked();
if(k<'0'||k>'9'){
break;
}
x=x*10+k-'0';
}
if(m){
x=-x;
}
}
void wt_L(long long x){
char f[20];
int m=0, s=0;
if(x<0){
m=1;
x=-x;
}
while(x){
f[s++]=x%10;
x/=10;
}
if(!s){
f[s++]=0;
}
if(m){
putchar_unlocked('-');
}
while(s--){
putchar_unlocked(f[s]+'0');
}
}
template<class S, class T> inline S chmin(S &a, T b){
if(a>b){
a=b;
}
return a;
}
template<class S, class T> inline S chmax(S &a, T b){
if(a<b){
a=b;
}
return a;
}
int N, bt[300000];
long long C[20], V[20], X[20], dp[300000], dp2[20][300000], sumC[300000], sumV[300000], sumX[20];
long long solve(int mask, int cnt){
int i;
long long res=0, tmp;
if(dp[mask] >= 0){
return dp[mask];
}
res = dp2[cnt][mask];
if(mask){
tmp = 4611686016279904256LL;
for(i=0;i<N;i++){
if(mask&1<<i){
chmin(tmp, solve(mask^(1<<i), cnt+1));
}
}
chmax(res, tmp);
}
return dp[mask] = res;
}
int main(){
int i, j, k;
long long res;
rd(N);
{
int Lj4PdHRW;
for(Lj4PdHRW=0;Lj4PdHRW<N;Lj4PdHRW++){
rd(X[Lj4PdHRW]);
}
}
{
int KL2GvlyY;
for(KL2GvlyY=0;KL2GvlyY<N;KL2GvlyY++){
rd(C[KL2GvlyY]);
}
}
{
int Q5VJL1cS;
for(Q5VJL1cS=0;Q5VJL1cS<N;Q5VJL1cS++){
rd(V[Q5VJL1cS]);
}
}
for(i=0;i<N;i++){
bt[1<<i] = i;
}
for(i=1;i<1<<N;i++){
j = i&(-i);
sumC[i] = sumC[i^j] + C[bt[j]];
sumV[i] = sumV[i^j] + V[bt[j]];
}
sumX[0] = 0;
for(i=0;i<N;i++){
sumX[i+1] = sumX[i] + X[i];
}
for(k=0;k<N+1;k++){
for(i=0;i<1<<N;i++){
if(sumC[i] <= sumX[k]){
dp2[k][i] = sumV[i];
continue;
}
dp2[k][i] = 0;
for(j=0;j<N;j++){
if(i&1<<j){
chmax(dp2[k][i], dp2[k][i^(1<<j)]);
}
}
}
}
for(i=0;i<1<<N;i++){
dp[i] = -1;
}
res = solve((1<<N)-1, 0);
wt_L(res);
putchar_unlocked('\n');
return 0;
}
// cLay varsion 20180208-1
// --- original code ---
// int N;
// ll X[20], C[20], V[20];
//
// ll dp[3d5];
//
// ll sumX[20];
// ll sumC[3d5], sumV[3d5];
// ll dp2[20][3d5];
// int bt[3d5];
//
// ll solve(int mask, int cnt){
// int i;
// ll res = 0, tmp;
//
// if(dp[mask] >= 0) return dp[mask];
//
// res = dp2[cnt][mask];
//
// if(mask){
// tmp = ll_inf;
// rep(i,N) if(mask&1<<i){
// tmp <?= solve(mask^(1<<i), cnt+1);
// }
// res >?= tmp;
// }
//
// return dp[mask] = res;
// }
//
// {
// int i, j, k;
// ll res;
//
// rd(N,X(N),C(N),V(N));
//
// rep(i,N) bt[1<<i] = i;
// rep(i,1,1<<N){
// j = i&(-i);
// sumC[i] = sumC[i^j] + C[bt[j]];
// sumV[i] = sumV[i^j] + V[bt[j]];
// }
//
// sumX[0] = 0;
// rep(i,N) sumX[i+1] = sumX[i] + X[i];
//
// rep(k,N+1){
// rep(i,1<<N){
// if(sumC[i] <= sumX[k]){
// dp2[k][i] = sumV[i];
// continue;
// }
// dp2[k][i] = 0;
// rep(j,N) if(i&1<<j){
// dp2[k][i] >?= dp2[k][i^(1<<j)];
// }
// }
// }
//
// rep(i,1<<N) dp[i] = -1;
// res = solve((1<<N)-1, 0);
//
// wt(res);
// }
Submission Info
Submission Time |
|
Task |
C - 駆引取引 |
User |
LayCurse |
Language |
C++14 (GCC 5.4.1) |
Score |
500 |
Code Size |
3937 Byte |
Status |
AC |
Exec Time |
356 ms |
Memory |
51840 KB |
Judge Result
Set Name |
Sample |
All |
Score / Max Score |
0 / 0 |
500 / 500 |
Status |
|
|
Set Name |
Test Cases |
Sample |
00_example_01.txt, 00_example_02.txt, 00_example_03.txt, 00_example_04.txt |
All |
00_example_01.txt, 00_example_02.txt, 00_example_03.txt, 00_example_04.txt, 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 30.txt, 31.txt, 32.txt, 33.txt, 34.txt, 35.txt, 36.txt, 37.txt, 38.txt, 39.txt |
Case Name |
Status |
Exec Time |
Memory |
00_example_01.txt |
AC |
4 ms |
12544 KB |
00_example_02.txt |
AC |
3 ms |
10496 KB |
00_example_03.txt |
AC |
4 ms |
16640 KB |
00_example_04.txt |
AC |
215 ms |
51840 KB |
01.txt |
AC |
5 ms |
22784 KB |
02.txt |
AC |
151 ms |
48384 KB |
03.txt |
AC |
143 ms |
51840 KB |
04.txt |
AC |
71 ms |
43776 KB |
05.txt |
AC |
5 ms |
22784 KB |
06.txt |
AC |
19 ms |
35200 KB |
07.txt |
AC |
6 ms |
22784 KB |
08.txt |
AC |
84 ms |
48384 KB |
09.txt |
AC |
183 ms |
51840 KB |
10.txt |
AC |
53 ms |
43776 KB |
11.txt |
AC |
211 ms |
51840 KB |
12.txt |
AC |
177 ms |
51840 KB |
13.txt |
AC |
242 ms |
51840 KB |
14.txt |
AC |
202 ms |
51840 KB |
15.txt |
AC |
232 ms |
51840 KB |
16.txt |
AC |
176 ms |
51840 KB |
17.txt |
AC |
177 ms |
51840 KB |
18.txt |
AC |
198 ms |
51840 KB |
19.txt |
AC |
165 ms |
51840 KB |
20.txt |
AC |
228 ms |
51840 KB |
21.txt |
AC |
209 ms |
51840 KB |
22.txt |
AC |
9 ms |
30976 KB |
23.txt |
AC |
4 ms |
14592 KB |
24.txt |
AC |
204 ms |
51840 KB |
25.txt |
AC |
191 ms |
51840 KB |
26.txt |
AC |
171 ms |
51840 KB |
27.txt |
AC |
6 ms |
22784 KB |
28.txt |
AC |
168 ms |
48384 KB |
29.txt |
AC |
356 ms |
51840 KB |
30.txt |
AC |
268 ms |
51840 KB |
31.txt |
AC |
199 ms |
51840 KB |
32.txt |
AC |
211 ms |
51840 KB |
33.txt |
AC |
195 ms |
51840 KB |
34.txt |
AC |
251 ms |
51840 KB |
35.txt |
AC |
174 ms |
51840 KB |
36.txt |
AC |
10 ms |
30976 KB |
37.txt |
AC |
13 ms |
33152 KB |
38.txt |
AC |
7 ms |
26880 KB |
39.txt |
AC |
355 ms |
51840 KB |