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(你总不能一个都不要然后还要算一种方法吧)

 1 /**************************************************************
 2     Problem: 3400
 3     User: HansBug
 4     Language: Pascal
 5     Result: Accepted
 6     Time:260 ms
 7     Memory:23704 kb
 8 ****************************************************************/
 9
10 const p=100000000;
11 var
12    i,j,k,l,m,n:longint;
13    b:array[0..5000] of longint;
14    a:array[0..3000,0..2000] of longint;
15 begin
16      readln(n,m);
17      for i:=1 to n do readln(b[i]);
18      for i:=1 to n do b[i]:=b[i] mod m;
19      fillchar(a,sizeof(a),0);
20      a[0,0]:=1;
21      for i:=1 to n do
22          for j:=0 to m do
23              a[i,j]:=(a[i-1,(j-b[i]+m) mod m]+a[i-1,j]) mod p;
24      writeln(a[n,0]-1);
25      readln;
26 end.   
时间: 2024-10-10 16:47:42

3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队的相关文章

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

3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 89  Solved: 60[Submit][Status] Description 农夫顿因开始玩飞盘之后,约翰也打算让奶牛们享受飞盘的乐趣.他要组建一只奶牛飞盘 队.他的N(1≤N≤2000)只奶牛,每只部有一个飞盘水准指数Ri(1≤Ri≤100000).约翰要选出1只或多于1只奶牛来参加他的飞盘队.由于约翰的幸

BZOJ(begin) 1375 [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队:dp【和为f的倍数】

题目链接:http://begin.lydsy.com/JudgeOnline/problem.php?id=1375 题意: 给你n个数,你可以从中选任意多个,但不能不选.问你所选数字之和为f的倍数的方案数. 题解: 表示状态: dp[i][j] = num of ways i:考虑到第i个数(还没选) j:之前所选数之和 MOD f == j 找出答案: ans = dp[n][0] - 1 不选也是一种方案,但题目种要求不能不选,所以-1. 如何转移: 选或不选第i个数. dp[i+1][

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

太水了,背包DP. 1 const maxn=100000000; 2 var n,f,i,j,ans,t,tt:longint; 3 q:array[0..3000] of longint; 4 a:array[0..3000,0..2000] of longint; 5 begin 6 readln(n,f); 7 for i:=1 to n do 8 begin 9 readln(q[i]); 10 q[i]:=q[i] mod f; 11 end; 12 a[0,0]:=1; 13 fo

P2946 [USACO09MAR]牛飞盘队Cow Frisbee Team

题目描述 After Farmer Don took up Frisbee, Farmer John wanted to join in the fun. He wants to form a Frisbee team from his N cows (1 <= N <= 2,000) conveniently numbered 1..N. The cows have been practicing flipping the discs around, and each cow i has a

牛飞盘队Cow Frisbee Team

老唐最近迷上了飞盘,约翰想和他一起玩,于是打算从他家的N头奶牛中选出一支队伍. 每只奶牛的能力为整数,第i头奶牛的能力为R i .飞盘队的队员数量不能少于 1.大于N. 一支队伍的总能力就是所有队员能力的总和. 约翰比较迷信,他的幸运数字是F,所以他要求队伍的总能力必须是F的倍数.请帮他 算一下,符合这个要求的队伍组合有多少?由于这个数字很大,只要输出答案除以 10^8的余 数就可以了. 输入格式 ?第一行:两个用空格分开的整数:N和F,1≤N≤2000,1≤F≤1000 ?第二行到N+1行:第

[USACO09MAR]牛飞盘队Cow Frisbee Team

传送门:https://www.luogu.org/problem/P2946 本题类似于01背包,定义  dp[i][j]  表示前  i  个牛,总和取模幸运值为  j  时的数量,a[i]为第j头牛的能力值,很明显dp[i][j]+=dp[i-1][j](不选择第i头牛)+dp[i-1][(j-a[i]+幸运值)%幸运值](选择第i头牛),这样就可以推出dp[n][0]第n头牛时余数为 0  的数量 1 #include<bits/stdc++.h> 2 using namespace

1638: [Usaco2007 Mar]Cow Traffic 奶牛交通

1638: [Usaco2007 Mar]Cow Traffic 奶牛交通 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 618  Solved: 217[Submit][Status] Description 农场中,由于奶牛数量的迅速增长,通往奶牛宿舍的道路也出现了严重的交通拥堵问题.FJ打算找出最忙碌的道路来重点整治. 这个牧区包括一个由M (1 ≤ M ≤ 50,000)条单行道路(有向)组成的网络,以及 N (1 ≤ N ≤ 5,000)个

bzoj1638[Usaco2007 Mar]Cow Traffic 奶牛交通*

bzoj1638[Usaco2007 Mar]Cow Traffic 奶牛交通 题意: N点M边有向图,每个入度为0的点都有无限只奶牛,现在它们要回宿舍(点1),求通过量最大的路的通过量.N≤5000,M≤50000 题解: 一条路的通过量=到达节点到入度为0节点的方案数*点1到出发节点的方案数(其实我也不知道为什么,这题意完全是模糊的),2次dfs就行了. 代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <al

BZOJ 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛( dp )

一道水 dp ...然后我一开始用 BFS ...结果 MLE 了... dp[ i ][ j ][ k ] 由它四个方向上的 k - 1 转移. ----------------------------------------------------------------------------------------------- #include<cstdio> #include<algorithm> #include<cstring> #include<