问题描述
zxa有一个集合A={a1,a2,⋯,an},n表示集合A的元素个数,这个集合明显有(2n−1)个非空子集合。 对于每个属于A的子集合B={b1,b2,⋯,bm}(1≤m≤n),m表示集合B的元素个数,zxa定义它的价值是min(b1,b2,⋯,bm)。 zxa很好奇,如果令Sodd表示集合A的所有含奇数个元素的非空子集合的价值之和,Seven表示集合A的所有含偶数个元素的非空子集合的价值之和,那么∣Sodd−Seven∣是多少,你能帮助他吗?
输入描述
第一行有一个正整数T,表示有T组数据。 对于每组数据: 第一行有一个正整数n,表示集合有n个元素。 第二行有n个互异的正整数,表示集合的元素a1,a2,⋯,an。 每一行相邻数字之间只有一个空格。 1≤T≤100,1≤n≤30,1≤ai≤109
输出描述
对于每组数据,输出一行,包含一个非负整数,表示∣Sodd−Seven∣的值。
输入样例
3 1 10 3 1 2 3 4 1 2 3 4
输出样例
10 3 4
Hint
对于第一组样例,A={10},它只有一个含奇数个元素的子集合{10},没有含偶数个元素的子集合,所以Sodd=10,Seven=0,∣Sodd−Seven∣=10。 对于第二组样例,A={1,2,3},它有四个含奇数个元素的子集合{1},{2},{3},{1,2,3},有三个含偶数个元素的子集合{1,2},{2,3},{1,3},所以Sodd=1+2+3+1=7,Seven=1+2+1=4,∣Sodd−Seven∣=3。
分析:题目描述很吓人,代码自己体会,至于为什么我也不知道。
AC代码:
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
int t,a[100];
scanf("%d",&t);
while(t--)
{
int i,n;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n);
printf("%d\n",a[n-1]);
}
return 0;
}