HDU 5680 zxa and set

来源:互联网 发布:林俊杰 睡粉 知乎 编辑:程序博客网 时间:2024/05/22 10:32
Problem Description
zxa has a set A={a1,a2,,an}, which has n elements and obviously (2n1) non-empty subsets.

For each subset B={b1,b2,,bm}(1mn) of A, which has m elements, zxa defined its value as min(b1,b2,,bm).

zxa is interested to know, assuming that Sodd represents the sum of the values of the non-empty sets, in which each set B is a subset of A and the number of elements in B is odd, and Seven represents the sum of the values of the non-empty sets, in which each set B is a subset of A and the number of elements in B is even, then what is the value of |SoddSeven|, can you help him?
 

Input
The first line contains an positive integer T, represents there are T test cases.

For each test case:

The first line contains an positive integer n, represents the number of the set A is n.

The second line contains n distinct positive integers, repersent the elements a1,a2,,an.

There is a blank between each integer with no other extra space in one line.

1T100,1n30,1ai109
 

Output
For each test case, output in one line a non-negative integer, repersent the value of |SoddSeven|.
 

Sample Input
311031 2 341 2 3 4
 

Sample Output
1034
Hint
For the first sample, $A=\{10\}$, which contains one subset $\{10\}$ in which the number of elements is odd, and no subset in which the number of elements is even, therefore $S_{odd}=10,S_{even}=0,|S_{odd}-S_{even}|=10$.

For the second sample, $A=\{1,2,3\}$, which contains four subsets $\{1\},\{2\},\{3\},\{1,2,3\}$ in which the number of elements is odd, and three subsets $\{1,2\},\{2,3\},\{1,3\}$ in which the number of elements is even, therefore $S_{odd}=1+2+3+1=7,S_{even}=1+2+1=4,|S_{odd}-S_{even}|=3$.

可以根据题意暴力的走,但是实际上静下来想想就会发现其实答案就是最大值啊。

#include<map>#include<set>#include<queue>#include<stack>#include<cmath>#include<cstdio>#include<bitset>#include<string>#include<vector>#include<cstring>#include<iostream>#include<algorithm>#include<functional>using namespace std;typedef long long LL;const int low(int x) { return x&-x; }const int INF = 0x7FFFFFFF;const int mod = 1e9 + 7;const int maxn = 50;int T, n, m, a[maxn];LL c[maxn][maxn];int main(){    c[0][0] = 1;    for (int i = 1; i < maxn; i++)    {        c[i][0] = c[i][i] = 1;        for (int j = 1; j < i; j++)        {            c[i][j] = c[i - 1][j] + c[i - 1][j - 1];        }    }    scanf("%d", &T);    while (T--)    {        scanf("%d", &n);        for (int i = 0; i < n; i++) scanf("%d", &a[i]);        sort(a, a + n);        LL L = 0, R = 0;        for (int i = 0; i < n; i++)        {            for (int j = 0; i + j < n; j++)            {                if (j & 1)                {                    R += c[n - i - 1][j] * a[i];                }                else                {                    L += c[n - i - 1][j] * a[i];                }            }        }        cout << abs(L - R) << endl;    }    return 0;}Close


0 0
原创粉丝点击