原题链接
穷举,属于模拟题,不要害怕
注意,判断三天互不相同时要判断三次:a!=b,b!=c,c!=a
代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct unit
{
ll v;
ll d;
};
ll a[100005]={0};
ll b[100005]={0};
ll c[100005]={0};
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
unit ax[3],bx[3],cx[3];
for(int i=0;i<3;i++)ax[i].v=bx[i].v=cx[i].v=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
int j;
for(j=0;j<3;j++)if(a[i]>ax[j].v)break;
if(j<3)
{
for(int l=2;l>j;l--)
{
ax[l].v=ax[l-1].v;
ax[l].d=ax[l-1].d;
}
ax[j].v=a[i];
ax[j].d=i;
}
}
for(int i=1;i<=n;i++)
{
scanf("%d",&b[i]);
int j;
for(j=0;j<3;j++)if(b[i]>bx[j].v)break;
if(j<3)
{
for(int l=2;l>j;l--)
{
bx[l].v=bx[l-1].v;
bx[l].d=bx[l-1].d;
}
bx[j].v=b[i];
bx[j].d=i;
}
}
for(int i=1;i<=n;i++)
{
scanf("%d",&c[i]);
int j;
for(j=0;j<3;j++)if(c[i]>cx[j].v)break;
if(j<3)
{
for(int l=2;l>j;l--)
{
cx[l].v=cx[l-1].v;
cx[l].d=cx[l-1].d;
}
cx[j].v=c[i];
cx[j].d=i;
}
}
ll ans=0;
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
for(int k=0;k<3;k++)
{
if(ax[i].d!=bx[j].d&&bx[j].d!=cx[k].d&&ax[i].d!=cx[k].d)
{
ans=max(ans,ax[i].v+bx[j].v+cx[k].v);
}
}
printf("%d\n",ans);
}
return 0;
}