24h購物| | PChome| 登入
2011-06-10 19:47:37| 人氣928| 回應0 | 上一篇 | 下一篇

d954. E. 得分

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

http://zerojudge.tw/ShowProblem?problemid=d954

內容 :

  世界上有各式各樣不同的比賽,每種比賽都有著不一樣的得分規則。例如:籃球,三分球 3 分,兩分球 2 分,罰球 1 分。

  對於某一個特定的得分規則而言,達成某一特定分數的方式可以有很多種。以籃球為例:要拿到 3 分,可以是三分球 3 分,或是,兩分球 2 分再加上罰球 1 分,或是,三個罰球。總共有三種方式。

  現在給定得分規則,與特定得分分數。問共有幾種方式可以得到這個特定分數。

輸入說明 :

第一行有一個正整數 T ,代表接下來有幾組測試資料。

  每組測資第一行有兩個整數 N S(1 N 100, 1 S I0000) N 代表有幾種得分方式,S 代表目標的特定分數。下一行有 N 個數字,代表各個得分方式所得的分數。(每種方式所得的分數為正整數且不超過 5000)

輸出說明 :

對於每一筆測試資料,輸出得分方式有幾種。答案保證不會超過 263 - 1

範例輸入 :

2
3 3
1 2 3
2 4
2 2

範例輸出 :

3
3

提示 :

出處 :

2010 NPSC 國中組決賽 (管理:pcshic)

作法 : DP (零錢問題)
切記要用 long long ,否則會溢位

/**********************************************************************************/
/*  Problem: d954 "E. 得分" from 2010 NPSC 國中組決賽                      */
/*  Language: C                                                                   */
/*  Result: AC (70ms, 334KB) on ZeroJudge                                         */
/*  Author: morris1028 at 2011-06-04 22:31:42                                     */
/**********************************************************************************/


#include<stdio.h>
main() {
    int T, N, S, a, b;
    scanf("%d", &T);
    while(T--) {
        scanf("%d %d", &N, &S);
        long long A[100], DP[10001] = {};
        for(a = 0; a < N; a++)
            scanf("%lld", &A[a]);
        DP[0] = 1;
        for(a = 0; a < N; a++)
            for(b = A[a]; b <= S; b++)
                DP[b] += DP[b-A[a]];
        printf("%lld\n", DP[S]);
    }
    return 0;
}

台長: Morris
人氣(928) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: NPSC |
此分類下一篇:d950. A. 帕斯卡三角形

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