#include<iostream>
using namespace std;
#define SIZE 20
int data[SIZE];
int N;
int used[SIZE];
int ballon[SIZE];
int count=0;
int weizhi[SIZE];
int Maxscore;

int  score(int p,int len)
{
	int pos=p;
	int r=p;
	int l=p;
	int sum=0;
	while(weizhi[--l]==0);
	while(weizhi[++r]==0);
	if(l>=0&&r<len)
	{
		sum=sum+data[l]*data[r];
	}
	if(l<0&&r<len)
	{
		sum=sum+data[r];
	}
	if(r>=len&&l>=0)
	{
		sum=sum+data[l];
	}
	if(l<0&&r>=len)
	{
		sum=sum+data[pos];	
	}
	return sum;
}

void Allpailie(int step,int len,int scores)
{
	if(step==len)
	{
		if(scores>Maxscore)
		{
			Maxscore=scores;
		}
		return;
	}
	for(int i=0;i<len;i++)
	{
		if(!used[i])
		{
			ballon[step]=i;
			used[i]=1;
			weizhi[i]=1;
			int tt=score(i,len);
			Allpailie(step+1,len,scores+tt);
			weizhi[i]=0;
			used[i]=0;
		}
	}

}

void main(){
	freopen("a.txt","r",stdin);
	int nCase;
	cin>>nCase;
	for(int tc=0;tc<nCase;tc++)
	{
		cin>>N;
		for(int i=0;i<N;i++)
		{
			cin>>data[i];
		}
	
		for(int i=0;i<N;i++)
		{
			used[i]=0;
			weizhi[i]=0;
		}
		Maxscore=0;
		Allpailie(0,N,0);
		cout<<Maxscore<<endl;
	}
}
原文地址:https://www.cnblogs.com/452035305qq/p/6438526.html