24h購物| | PChome| 登入
2012-04-06 21:50:33| 人氣668| 回應0 | 上一篇 | 下一篇

[UVA][DP] 435 - Block Voting

推薦 0 收藏 0 轉貼0 訂閱站台


 Block Voting 

Different types of electoral systems exist. In a block voting system the members of a party do not vote individually as they like, but instead they must collectively accept or reject a proposal. Although a party with many votes clearly has more power than a party with few votes, the votes of a small party can nevertheless be crucial when they are needed to obtain a majority. Consider for example the following five-party system:

tabular21

Coalition {A,B} has 7 + 4 = 11 votes, which is not a majority. When party C joins coalition {A,B}, however, {A,B,C} becomes a winning coalition with 7+4+2 = 13 votes. So even though C is a small party, it can play an important role.

As a measure of a party's power in a block voting system, John F. Banzhaf III proposed to use the power index. The key idea is that a party's power is determined by the number of minority coalitions that it can join and turn into a (winning) majority coalition. Note that the empty coalition is also a minority coalition and that a coalition only forms a majority when it has more than half of the total number of votes. In the example just given, a majority coalition must have at least 13 votes.

In an ideal system, a party's power index is proportional to the number of members of that party.

Your task is to write a program that, given an input as shown above, computes for each party its power index.

Input Specification

The first line contains a single integer which equals the number of test cases that follow. Each of the following lines contains one test case.

The first number on a line contains an integer P in [1 tex2html_wrap_inline36 20] which equals the number of parties for that test case. This integer is followed by P positive integers, separated by spaces. Each of these integers represents the number of members of a party in the electoral system. The i-th number represents party number i. No electoral system has more than 1000 votes.

Output Specification

For each test case, you must generate P lines of output, followed by one empty line. P is the number of parties for the test case in question. The i-th line (i in [ tex2html_wrap_inline52 ]) contains the sentence:

party i has power index I

where I is the power index of party i.

Sample Input

3
5 7 4 2 6 6
6 12 9 7 3 1 1
3 2 1 1

Sample Output

party 1 has power index 10
party 2 has power index 2
party 3 has power index 2
party 4 has power index 6
party 5 has power index 6

party 1 has power index 18
party 2 has power index 14
party 3 has power index 14
party 4 has power index 2
party 5 has power index 2
party 6 has power index 2

party 1 has power index 3
party 2 has power index 1
party 3 has power index 1



#include <stdio.h>

int main() {
    int t, P, A[20], i, j, k;
    scanf("%d", &t);
    while(t--) {
        scanf("%d", &P);
        int sum = 0;
        for(i = 0; i < P; i++)
            scanf("%d", &A[i]), sum += A[i];
        int half = sum/2 + (sum&1);
        for(i = 0; i < P; i++) {
            int DP[1001] = {};
            DP[0] = 1;
            for(j = 0; j < P; j++) {
                if(i == j)    continue;
                for(k = sum-A[j]; k >= 0; k--)
                    DP[k+A[j]] += DP[k];
            }
            int ans = 0;
            for(j = half-A[i]; j < half && j >= 0; j++) {
                    ans += DP[j];
            }
            printf("party %d has power index %d\n", i+1, ans);
        }
        puts("");
    }
    return 0;
}

台長: Morris
人氣(668) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: UVA |
此分類下一篇:[UVA][LIS] 497 - Strategic Defense Initiative
此分類上一篇:[UVA][DP] 10912 - Simple Minded Hashing

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文