【基础】奶牛沙盘队 USACO c++

描述

Farmer Han 开始玩飞盘之后,YDS也打算让奶牛们享受飞盘的乐趣.他要组建一只奶牛飞盘队.他的 N ( 1 ≤N≤ 2000 )只奶牛,每只奶牛有一个飞盘水准指数 Ri ( 1 ≤Ri≤ 100000 ).YDS要选出1只或多于1只奶牛来参加他的飞盘队.由于YDS的幸运数字是 F ( 1 ≤F≤ 1000 ),他希望所有奶牛的飞盘水准指数之和是幸运数字的倍数.
帮 YD S算算一共有多少种组队方式.组队方式数模10^8 ^取余的结果.

输入描述

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

输出描述

组队方式数模108 取余的结果

用例输入 1 

4 5 
1
2 
8 
2

用例输出 1 

3

来源

动态规划

代码

#include <stdio.h>
#define mod 100000000 
int f[2001][1001];
int n,m;
inline int read()
{
    int x=0;char ch=getchar();
    while(ch<'0'||ch>'9')ch=getchar();
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x;
}
int main()
{
n=read();
m=read();
    for(int i=1;i<=n;i++)
{
        int p=read();
        f[i][p%m]=1;
        for(int j=0;j<m;j++)
{
            f[i][j] =(f[i][j]+f[i-1][j])%mod;
            f[i][(j+p)%m]=(f[i][(j+p)%m]+f[i-1][j])%mod;
        }    
    }
    printf("%d\n", f[n][0]);
    return 0;
}

1. 奶牛飞盘 时限:1000ms 内存限制:10000K 总时限:3000ms 描述: Farmer John 想从他的N只奶牛(1<=N<=2000)选出若干组成一支飞盘,N只奶牛依次编号为1..N,每只奶牛根据其飞盘的技能排名为R_i,(1<=R_i<=100,000)。由于Farmer John的幸运数字是F(1<=F<=1000), 因此,他想让他的伍中奶牛的排名之和是F的倍数。现在Farmer John知道,他有多少种选择的方式。由于这个数十分大,因此只用输出这个数 模( mod )100,000,000.。 输入: 第一行两个数字N和F。 接下来的N行每行有一个数字代表第R_i. 输出: 只有一行,输出FJ 组方案数 mod 100,000,000的值(对100,000,000取余数 )。 输入样例: 4 5 1 2 8 2 输出样例: 3 提示: 注:样例中Farmer John 有4只奶牛,排名依次为 1, 2, 8, and 2. ,然而FJ只会选排名之和为5的倍数的伍。 来源: USACO月赛 2. 判素数 时限:100ms 内存限制:10000K 总时限:1000ms 描述: 给出一个数N(2<=N<=10000),判定它是否为素数。 素数:一个大于等于2的数,除了1和它本身,再没有其他的整数能将其整除的数叫素数。 输入: 从标准输入输入一个整数。 输出: 若给定数为素数,向标准输出输出“Yes”,否则,输出“No”。 输入样例: 997 输出样例: Yes 提示: 从2开始,到N-1,对N进行试除,若存在某个数能将N整除,说明N为非素数。若不存在任何的整数能将其整除,说明N试素数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值