对于 2n 的数据范围(前4个点, n<=18 )状压枚举如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int T;cin>>T;
while(T--)
{
int n;cin>>n;
int a[20]={0};
for(int i=0;i<n;i++) scanf("%d",a+i);
int ans=0;
for(int s=0;s<(1<<n);s++)
{
int now=0;
for(int i=0;i<n;i++)
{
int j;
for(j=i-1;j>=0;j--)
{
int st_j=s&(1<<j);
int st_i=s&(1<<i);
if(st_j!=0) st_j=1; if(st_i!=0) st_i=1;
if(st_j==st_i) break;
if(j==0) j=-5;
}
if(j==-5) continue;
if(a[i]==a[j]) now+=a[i];
}
ans=max(ans,now);
}
cout<<ans<<endl;
}
}
结果
理论上主函数里开数组后给一个初始值后面会默认初始化为0,而且本地能过数据,但是洛谷上评测炸了
数组改到外面开就能过
20pts
玄学