警示后人,数组开在外面
查看原帖
警示后人,数组开在外面
531766
080822yty楼主2024/11/28 16:33

对于 2n2^n 的数据范围(前4个点, n<=18n<=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

玄学

2024/11/28 16:33
加载中...