显示代码纯文本
#include <cstdio>
char c, buf[1 << 15], *fs, *ft;
inline char getc(){
return (fs == ft && (ft = (fs = buf) + fread(buf, 1, 1 << 15, stdin), fs == ft)) ? 0 : *fs++;
}
inline int read(int& x) {
for (c = getc(); c < '0' || c > '9'; c = getc());
for (x = 0; c >= '0' && c <= '9'; c = getc()) x = (x << 1) + (x << 3) + (c ^ 48);
return x;
}
int n, ans, r1[25], r2[25], a1[25], a2[25], a3[25];
int sta, s, d1[32800], d2[32800], d3[32800];
bool back(int x, int y) {
return (d1[x] >= r1[y]) ? (d2[x] + d3[x] < r2[y]) : ((d2[x] >= r2[y]) ? (d1[x] + d3[x] < r1[y]) : (d1[x] + d2[x] + d3[x] < r1[y] + r2[y]));
}
int mian() {
freopen("asm_grenade.in", "r", stdin);
freopen("asm_grenade.out", "w", stdout);
read(n);
for (register int i = 1; i <= n; ++i) read(r1[i]);
for (register int i = 1; i <= n; ++i) read(r2[i]);
for (register int i = 1; i <= n; ++i) read(a1[i]);
for (register int i = 1; i <= n; ++i) read(a2[i]);
for (register int i = 1; i <= n; ++i) read(a3[i]);
ans = read(d1[0]) + read(d2[0]) + read(d3[0]);
sta = (1 << n) - 1;
for (register int i = 0; i <= sta; ++i)
for (register int j = 1; j <= n; ++j)
if (!(i & 1 << (j - 1))) if (!back(i, j))
s = i | (1 << (j - 1)), ans = (d3[s] = d3[i] + a3[j] + ((d1[s] = d1[i] - r1[j]) < 0 ? d1[s] : 0) + ((d2[s] = d2[i] - r2[j]) < 0 ? d2[s] : 0)) + (d1[s] = d1[s] < 0 ? a1[j] : d1[s] + a1[j]) + (d2[s] = d2[s] < 0 ? a2[j] : d2[s] + a2[j]) > ans ? d1[s] + d2[s] + d3[s] : ans;
printf("%d\n", ans);
return 0;
}
int hh = mian();
int main() {
return 0;
}