boluen

#include<stdio.h>
int n;
int min;
int i;
int num[5];
int vist[5];
void dfs(int step,int sum)
{
	if(step==n)
	{
		if(sum>min)
			min=sum;
		return;
	}
	for(i=0;i<n;i++)
	{
		int iz,iy,flagz,flagy;
		if(!vist[i])
		{	
			vist[i]=1;
			iz=i-1;
			while(1)
			{
				if(iz<0)
				{
					flagz=0;
					break;
				}
				if(!vist[iz])
				{
					flagz=1;
					break;
				}
				if(vist[iz])
					iz=iz-1;
			
			}
			iy=i+1;
			while(1)
			{
				if(iy==n)
				{
					flagy=0;
					break;
				}
				if(!vist[iy])
				{
					flagy=1;
					break;
				}
				if(vist[iy])
					iy=iy+1;
				
			}
			if(flagz&&flagy)
			{
				dfs(step+1,sum+num[iz]*num[iy]);
				vist[i]=0;
			}
			if(!flagz&&flagy)
                {
                    dfs(step+1,sum+num[iy]);
                    vist[i]=0;
                }
                if(flagz&&!flagy)
                {
                    dfs(step+1,sum+num[iz]);
                    vist[i]=0;
                }
                if(!flagz&&!flagy)
                {
                    dfs(step+1,sum+num[i]);
                    vist[i]=0;
                }
		}

	}
}
int main()
{
	
	freopen("input.txt","r",stdin);
	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%d",&num[i]);
	min=-1;
	dfs(0,0);
	printf("%d",min);
	return 0;
}

 

posted on 2017-02-27 15:23  霸王程  阅读(66)  评论(0编辑  收藏  举报