首页 > 代码库 > bzoj1630/2023 [Usaco2007 Demo]Ant Counting
bzoj1630/2023 [Usaco2007 Demo]Ant Counting
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1630
http://www.lydsy.com/JudgeOnline/problem.php?id=2023
【题解】
直接dp,f[i,j]表示第i个种族选了j只蚂蚁的方案数,转移枚举这个种族选择的方案。
然后可以前缀和+滚动数组
# include <stdio.h> # include <string.h> # include <iostream> # include <algorithm> // # include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; typedef unsigned long long ull; const int M = 5e5 + 10; const int mod = 1e6; # define RG register # define ST static int m, n, A, B; int a[M], bel[M], sum[M]; int f[2][100010], s[2][100010]; int main() { cin >> m >> n >> A >> B; for (int i=1; i<=n; ++i) { scanf("%d", &bel[i]); a[bel[i]] ++; } int pre = 0, cur = 1; f[pre][0] = 1; for (int i=0; i<=n; ++i) s[pre][i] = 1; for (int i=1; i<=m; ++i) { for (int j=0; j<=n; ++j) { if(a[i] < j) f[cur][j] = (s[pre][j] - s[pre][j-a[i]-1] + mod) % mod; else f[cur][j] = s[pre][j]; if(j == 0) s[cur][j] = f[cur][j]; else s[cur][j] = (s[cur][j-1] + f[cur][j]) % mod; } swap(pre, cur); } int ans = (s[pre][B] - s[pre][A-1] + mod) % mod; cout << ans << endl; return 0; }
bzoj1630/2023 [Usaco2007 Demo]Ant Counting
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。