Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
33973 LYLAKIOIAKIOI 【S】T3 C++ 运行超时 55 2000 MS 5400 KB 2123 2024-11-01 14:16:00

Tests(11/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--){ 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=30;int v=(1<<k)/2; for(int p=0;p<=LM;p++){ int m1=v,m2=v,m3=v,m4=v; if((b[1]>>p)&1) m1--; if((b[2]>>p)&1) m2--; if((b[3]>>p)&1) m3--; if((b[4]>>p)&1) m4--; 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]; }}}} } } 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(); cout<<f[31][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; }


测评信息: