3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队

时间:2023-03-09 17:28:38
3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队

3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队

Time Limit: 3 Sec  Memory Limit: 128 MB
Submit: 129  Solved: 84
[Submit][Status][Discuss]

Description

    农夫顿因开始玩飞盘之后,约翰也打算让奶牛们享受飞盘的乐趣.他要组建一只奶牛飞盘
队.他的N(1≤N≤2000)只奶牛,每只部有一个飞盘水准指数Ri(1≤Ri≤100000).约翰要选出1只或多于1只奶牛来参加他的飞盘队.由于约翰的幸运数字是F(1≤F≤1000),他希望所有奶牛的飞盘水准指数之和是幸运数字的倍数.
    帮约翰算算一共有多少种组队方式.

Input

    第1行输入N和F,之后N行输入Ri.

Output

    组队方式数模10^8取余的结果.

Sample Input

4 5
1
2
8
2

Sample Output

3

HINT

组队方式有(2,3),(3,4),(1,2,4)共三种

Source

Silver

题解:一开始还在想着怎么DFS剪枝= =。。。感觉自己水水哒

其实就是一个水水的DP就完事啦,记得最后要-1(你总不能一个都不要然后还要算一种方法吧)

 /**************************************************************
Problem:
User: HansBug
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/ const p=;
var
i,j,k,l,m,n:longint;
b:array[..] of longint;
a:array[..,..] of longint;
begin
readln(n,m);
for i:= to n do readln(b[i]);
for i:= to n do b[i]:=b[i] mod m;
fillchar(a,sizeof(a),);
a[,]:=;
for i:= to n do
for j:= to m do
a[i,j]:=(a[i-,(j-b[i]+m) mod m]+a[i-,j]) mod p;
writeln(a[n,]-);
readln;
end.