BZOJ 3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队 动态规划

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

题目连接:

http://www.lydsy.com/JudgeOnline/problem.php?id=3400

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

题意

有3000只羊,每只羊都有自己的能力值。

问你有多少种选择方案,可以使得羊的能力值之和,是约翰能力值的倍数。

题解:

dp

dp[i][j]表示前i只绵羊,当前mod约翰能力值倍数的为j的方案数。

然后暴力转移

代码

#include<bits/stdc++.h>
using namespace std;
const int mod = 1e8;
int dp[2][1005];
int now=1,pre=0,n,f;
int main()
{
    scanf("%d%d",&n,&f);
    for(int i=1;i<=n;i++)
    {
        int x;scanf("%d",&x);
        swap(now,pre);
        memset(dp[now],0,sizeof(dp[now]));
        dp[now][x%f]++;
        for(int j=0;j<f;j++)
        {
            dp[now][j]=(dp[now][j]+dp[pre][j])%mod;
            dp[now][(j+x)%f]=(dp[now][(j+x)%f]+dp[pre][j])%mod;
        }
    }
    printf("%d\n",dp[now][0]);
}
posted @   qscqesze  阅读(470)  评论(0编辑  收藏  举报
编辑推荐:
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 基于DeepSeek R1 满血版大模型的个人知识库,回答都源自对你专属文件的深度学习。
· 在缓慢中沉淀,在挑战中重生!2024个人总结!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来!
历史上的今天:
2015-08-22 Codeforces Gym 100733H Designation in the Mafia flyod
2015-08-22 Codeforces Gym 100733A Shitália 计算几何
2015-08-22 Codeforces Gym 100733J Summer Wars 线段树,区间更新,区间求最大值,离散化,区间求并
2015-08-22 Codeforces Gym 100338I TV Show 傻逼DFS,傻逼题
点击右上角即可分享
微信分享提示