Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
34025 | LYLAKIOI | 【S】T3 | C++ | 通过 | 100 | 1738 MS | 39012 KB | 1830 | 2024-11-01 17:06:57 |
#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair #define p_b push_back using namespace std; typedef long long ll; const int maxn=2e5+10; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } int k,a[40],b[40]; ll dp[31][16][10][10][10][10]; inline void cmx(ll &a,ll b){if(a<b)a=b;} const int L=9; void slv(){ k=read();up(i,1,(1<<k)-1)a[i]=read();up(i,1,k)b[i]=read(); memset(dp,128,sizeof(dp)); dp[0][15][0][0][0][0]=0; up(i,1,30){ up(f1,0,L)up(f2,0,L)up(f3,0,L)up(f4,0,L){ cmx(dp[i][0][f1>>1][f2>>1][f3>>1][f4>>1],dp[i-1][15][f1][f2][f3][f4]); } up(j,1,15){ memcpy(dp[i][j],dp[i][j-1],sizeof(dp[i][j-1])); up(f1,0,L)up(f2,0,L)up(f3,0,L)up(f4,0,L){ int vf1=f1,vf2=f2,vf3=f3,vf4=f4; if(j&1)vf1--;if(j&2)vf2--;if(j&4)vf3--;if(j&8)vf4--; if(vf1>=0&&vf2>=0&&vf3>=0&&vf4>=0) cmx(dp[i][j][f1][f2][f3][f4],dp[i][j-1][vf1][vf2][vf3][vf4]+a[j]*1ll*(1<<(i-1))); } } int s1=(b[1]>>(i-1))&1,s2=(b[2]>>(i-1))&1,s3=(b[3]>>(i-1))&1,s4=(b[4]>>(i-1))&1; up(f1,0,L)up(f2,0,L)up(f3,0,L)up(f4,0,L) if((f1&1)!=s1||(f2&1)!=s2||(f3&1)!=s3||(f4&1)!=s4)dp[i][15][f1][f2][f3][f4]=-9e18; }printf("%lld\n",dp[30][15][b[1]>>29][b[2]>>29][b[3]>>29][b[4]>>29]); } int main(){ //freopen("enum.in","r",stdin); //freopen("enum.out","w",stdout); int t=read();while(t--)slv(); fclose(stdin); fclose(stdout); return 0; }