问题描述
逗志芃在干了很多事情后终于闲下来了,然后就陷入了深深的无聊中。不过他想到了一个游戏来使他更无聊。他拿出n个木棍,然后选出其中一些粘成一根长的,然后再选一些粘成另一个长的,他想知道在两根一样长的情况下长度最长是多少。
输入格式
第一行一个数n,表示n个棍子。第二行n个数,每个数表示一根棍子的长度。
输出格式
一个数,最大的长度。
样例输入
4
1 2 3 1
样例输出
3
数据规模和约定
n<=15
#include <stdio.h>
#include <stdlib.h>
//深度优先
//每根棍子有3种状态:被a选择,被b选择,不被选择
//传递一个变量地址记录最大值
//每次抉择若使得a==b,则与最大值比较更新最大值
void sp(int p[],int a,int b,int pi,int pn,int *max){
if(a==b&&a>*max)*max=a;
if(pi==pn)return;
int temp=p[pi++];
sp(p,a+temp,b,pi,pn,max);
sp(p,a,b+temp,pi,pn,max);
sp(p,a,b,pi,pn,max);
}
int main(void){
int n,*p,max=0;
scanf("%d",&n);
p=(int *)malloc(sizeof(int)*n);
for(int i=0;i<n;i++)scanf("%d",&p[i]);
sp(p,0,0,0,n,&max);
printf("%d",max);
return 0;
}