Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
34001 LYLAKIOIAKIOI 【S】T3 C++ 运行超时 30 2000 MS 5396 KB 2455 2024-11-01 15:04:29

Tests(6/20):


#include<bits/stdc++.h> #define ll long long using namespace std; const int N=11; ll f[N<<2][N][N][N][N]; ll g[N][N][N][N]; int a[N<<1],b[N];int K; inline void dp1(){ memset(g,0xc0,sizeof(g)); //int inf=0xc0c0c0c0; g[0][0][0][0]=0; int v=1<<K; for(int i=1;i<v;i++) for(int j=v/2;j>=0;j--) for(int k=v/2;k>=0;k--) for(int m=v/2;m>=0;m--) for(int n=v/2;n>=0;n--){ if((K<4)&&(n!=0)) continue; if((K<3)&&(m!=0)) continue; int tj=j,tk=k,tm=m,tn=n; if(i&1) tj++;if((i>>1)&1) tk++; if((i>>2)&1) tm++;if((i>>3)&1) tn++; g[tj][tk][tm][tn]=max(g[tj][tk][tm][tn],g[j][k][m][n]+a[i]); } }inline void upd(int a,int b,int c,int d,int id){ ll tmp=0;//ll val=1ll<<id; for(int i=a;i>=0;i--){ for(int j=b;j>=0;j--){ for(int k=c;k>=0;k--){ for(int m=d;m>=0;m--){ if(g[a-i][b-j][c-k][d-m]<0) continue; tmp=max(tmp,f[id][i][j][k][m]+(g[a-i][b-j][c-k][d-m]<<id)); } } } }f[id][a][b][c][d]=tmp; }inline void dp2(){ memset(f,0,sizeof(f)); int LM=31;int v=(1<<K)/2; for(int p=0;p<=LM;p++){ int m1=v+2,m2=v+2,m3=v+2,m4=v+2; if((b[1]>>p)&1) m1--; if((b[2]>>p)&1) m2--; if((b[3]>>p)&1) m3--; if((b[4]>>p)&1) m4--; //cout<<m1<<' '<<m2<<' '<<m3<<' '<<m4<<endl; if(K<4) m4=0;if(K<3) m3=0; for(int i=m1;i>=0;i--,i--){//if((i&1)!=((b[1]>>p)&1)) continue; for(int j=m2;j>=0;j--,j--){//if((j&1)!=((b[2]>>p)&1)) continue; for(int k=m3;k>=0;k--,k--){//if((k&1)!=((b[3]>>p)&1)) continue; for(int m=m4;m>=0;m--,m--){//if((m&1)!=((b[4]>>p)&1)) continue; upd(i,j,k,m,p);f[p+1][i/2][j/2][k/2][m/2]=f[p][i][j][k][m]; //cout<<p<<' '<<i<<' '<<j<<' '<<k<<' '<<m<<' '<<f[p][i][j][k][m]<<endl; }}}} } }//2222620967023410 void slv(){ //double c=clock(); cin>>K;int v=(1<<K); memset(a,0,sizeof(a));memset(b,0,sizeof(b)); for(int i=1;i<v;i++) cin>>a[i]; for(int i=1;i<=K;i++) cin>>b[i]; dp1();dp2(); //for(int i=0;i<=v;i++)for(int j=0;j<=v;j++) cout<<i<<' '<<j<<' '<<g[i][j][0][0]<<endl; cout<<f[32][0][0][0][0]<<'\n'; } int main(){ //double c=clock(); int t;cin>>t;while(t--) slv(); //cerr<<(clock()-c)/CLOCKS_PER_SEC<<endl; return 0; }


测评信息: