求助,只有 16 分
#include<iostream>
#include<algorithm>
using namespace std;
const int N=2e5+5;
int T,n;
struct man{
int rating,contri,rank;
}m[N];
bool cmp(man x,man y){
return x.rating>y.rating;
}
int b[N];
long long ans;
bool flag;
int main(){
cin.tie(0)->sync_with_stdio(0);
cin>>T;
while(T--){
cin>>n;
for(int i=1;i<=n;i++){
cin>>m[i].rating;
}
for(int i=1;i<=n;i++){
cin>>m[i].contri;
}
if(n==1){
cout<<"0\n"; continue;
}
if(n==2){
cout<<max(m[1].contri,m[2].contri)-min(m[1].contri,m[2].contri)<<"\n"; continue;
}
flag=0;
for(int i=1;i<n;i++){ //特殊性质A
if(m[i].contri!=m[i+1].contri){
flag=1; break;
}
}
if(flag==0){ //特殊性质A
cout<<(n-2)*m[1].contri<<"\n"; continue;
}
flag=0;
for(int i=1;i<=n;i++){ //特殊性质C
if(m[i].contri<0){
flag=1; break;
}
}
sort(m+1,m+n+1,cmp);
if(flag==0){ //特殊性质C
long long sum=0;
for(int i=2;i<=n;i++){
sum+=m[i].contri;
}
if(sum>=m[1].contri){
cout<<sum-m[1].contri<<"\n"; continue;
}
}
for(int i=1;i<=n;i++){
m[i].rank=i;
}
for(int i=1;i<=n;i++){
b[i]=i;
}
ans=-1e9;
do{
long long cnt=0;
for(int i=1;i<=n;i++){
if(m[i].rank>b[i]){
cnt+=m[i].contri;
}
else if(m[i].rank<b[i]){
cnt-=m[i].contri;
}
}
ans=max(ans,cnt);
}while(next_permutation(b+1,b+n+1));
cout<<ans<<"\n";
}
return 0;
}