BZOJ2023: [Usaco2005 Nov]Ant Counting 数蚂蚁(…
2018-09-01 05:38:23来源:博客园 阅读 ()
题意
题目描述的很清楚。。。
有一天,贝茜无聊地坐在蚂蚁洞前看蚂蚁们进进出出地搬运食物.很快贝茜发现有些蚂蚁长得几乎一模一样,于是她认为那些蚂蚁是兄弟,也就是说它们是同一个家族里的成员.她也发现整个蚂蚁群里有时只有一只出来觅食,有时是几只,有时干脆整个蚁群一起出来.这样一来,蚂蚁们出行觅食时的组队方案就有很多种.作为一头有数学头脑的奶牛,贝茜注意到整个蚂蚁群由T(1≤T≤1000)个家族组成,她将这些家族按1到T依次编号.编号为i的家族里有Ni(1≤Ni≤100)只蚂蚁.同一个家族里的蚂蚁可以认为是完全相同的.如果一共有S,S+1….,B(1≤S≤B≤A)只蚂蚁一起出去觅食,它们一共能组成多少种不同的队伍呢?注意:只要两支队伍中所包含某个家族的蚂蚁数不同,我们就认为这两支队伍不同.由于贝茜无法分辨出同一家族的蚂蚁,所以当两支队伍中所包含的所有家族的蚂蚁数都相同时,即使有某个家族换了几只蚂蚁出来,贝茜也会因为看不出不同而把它们认为是同一支队伍.
Sol
裸的dp比较好想,$f[i][j]$表示前$i$个家族,选了$j$个蚂蚁
转移的时候枚举这个选了几个
这玩意儿显然可以用前缀和优化,空间问题用滚动数组处理
有一个小trick:在处理前缀和的时候我们可以保留下本层dp的信息,所以滚动数组是不需要的,具体看代码吧
#include<cstdio> #include<algorithm> #include<cstring> #define pt(x) printf("%d ", x); using namespace std; const int MAXN = 1e5 + 10, mod = 1000000; inline int read() { char c = getchar(); int x = 0, f = 1; while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();} while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar(); return x * f; } int T, A, L, R; int num[MAXN], f[MAXN], sum[MAXN], s; int main() { T = read(); A = read(); L = read(); R = read(); for(int i = 1; i <= A; i++) num[read()]++; for(int i = 0; i <= num[1]; i++) sum[i] = 1; for(int i = 1; i <= T; i++) { s += num[i]; for(int j = 0; j <= s; j++) { int x = j - num[i] - 1; f[j] = sum[j]; if(x >= 0) f[j] = (f[j] - sum[x] + mod) % mod; } sum[0] = f[0]; for(int j = 1; j <= s + num[i + 1]; j++) sum[j] = (sum[j - 1] + f[j]) % mod; if(i != T) memset(f, 0, sizeof(f)); } int ans = 0; for(int i = L; i <= R; i++) (ans += f[i]) %= mod; printf("%d", ans % mod); return 0; } /* 3 5 1 5 1 2 2 1 3 */
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- P2995 [USACO10NOV]牛的照片(树状数组,逆序对) 2019-10-25
- Lenovo K29 笔记本经常没声音解决方案Hotkey[gevu18ww].exe 2018-06-18
- bzoj 3384: [Usaco2004 Nov]Apple Catching 接苹果 2018-06-17
- P2915 [USACO08NOV]奶牛混合起来Mixed Up Cows 2018-06-17
- P2885 [USACO07NOV]电话线Telephone Wire 2018-06-17
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash