首页 > 代码库 > 打气球

打气球

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


int  socore(int ballon[SIZE],int len,int j){
	int sum=0;
	int k,h;
	int flag1=0,flag2=0;
	int pos=j;
	for(k=pos+1;k<len;k++)
	{
		if(weizhi[k]==0)
		{
			flag1=1;
			break;
		}
	}
	for(h=pos-1;h>=0;h--)
	{
		if(weizhi[h]==0)
		{
			flag2=1;
			break;
		}
	}
	if(flag1==1&&flag2==1)
	{
		sum=sum+data[k]*data[h];
	}
	if(flag1==1&&flag2!=1)
	{
		sum=sum+data[k];
	}
	if(flag2==1&&flag1!=1)
	{
		sum=sum+data[h];
	}
	if(flag2!=1&&flag1!=1)
	{
		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=socore(ballon,len,i);
			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];
		}
		//count=0;
		for(int i=0;i<SIZE;i++){
			used[i]=weizhi[i]=0;
		}
		Maxscore=0;
		Allpailie(0,N,0);
		cout<<Maxscore<<endl;
		
		//cout<<count;
		/*cout<<N<<endl;
		for(int j=0;j<N;j++)
		{
			cout<<data[j]<<" ";
		}
		cout<<endl;*/
	}
}

 

打气球