题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2023

题意:

  有n个家族,共m只蚂蚁(n <= 1000, m <= 100000)。

  每个家族有cnt[i]只蚂蚁,并且同一家族中的蚂蚁无差别。

  从窝里爬出来x只蚂蚁的方案数为f(x)。

  给定a,b,让你求 ∑ f(a to b) MOD 1000000。

题解:

  表示状态:

    dp[i][j] = combinations

    i:第i个家族已经考虑过了

    j:目前出来了j只蚂蚁

  找出答案:

    ans = ∑ dp[n][a to b]

  如何转移:

    dp[i][j] = ∑ dp[i-1][j-k] (0 <= k <= cnt[i], j-k >= 0)

    即:dp[i][j] = ∑ dp[i-1][max(0,j-cnt[i]) to j];

  边界条件:

    dp[0][0] = 1

    others = 0

  优化:

    (1)裸dp时间复杂度为O(n * m^2) = 10^13,绝对炸了。。。

      所以前缀和优化:求 ∑ dp[i-1][max(0,j-cnt[i]) to j]。

    (2)裸dp空间复杂度为 n*m(Byte) = 95 MB > 64 MB,又炸了咋办。。。

      滚动数组。因为dp[i][j]只会用到dp[i-1][...]。

AC Code:

 // state expression:
// dp[i][j] = combinations
// i: considering ith group
// j: j ants have been outside
//
// find the answer:
// sigma dp[n][a to b]
//
// transferring:
// dp[i][j] = sigma dp[i-1][j-k] (0 <= k <= cnt[i], j-k >= 0)
//
// boundary:
// dp[0][0] = 1
// others = 0
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 1005
#define MAX_M 100005
#define MOD 1000000 using namespace std; int n,m,a,b;
int ans=;
int cnt[MAX_N];
int dp[][MAX_M];
int sum[][MAX_M]; void read()
{
cin>>n>>m>>a>>b;
memset(cnt,,sizeof(cnt));
int temp;
for(int i=;i<m;i++)
{
cin>>temp;
cnt[temp]++;
}
} int cal_mod(int x)
{
return (x%MOD+MOD)%MOD;
} int cal_sum(int k,int x,int y)
{
if(x==) return cal_mod(sum[k&][y]);
return cal_mod(sum[k&][y]-sum[k&][x-]);
} void update_sum(int k,int x)
{
if(x==) sum[k&][x]=cal_mod(dp[k&][x]);
else sum[k&][x]=cal_mod(sum[k&][x-]+dp[k&][x]);
} void solve()
{
memset(dp,,sizeof(dp));
dp[][]=;
for(int i=;i<=m;i++)
{
sum[][i]=;
}
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
dp[i&][j]=cal_sum(i-,max(,j-cnt[i]),j);
update_sum(i,j);
}
}
for(int i=a;i<=b;i++)
{
ans=cal_mod(ans+dp[n&][i]);
}
} void print()
{
cout<<ans<<endl;
} int main()
{
read();
solve();
print();
}

BZOJ 2023 [Usaco2005 Nov]Ant Counting 数蚂蚁:dp【前缀和优化】的更多相关文章

  1. bzoj 2023: [Usaco2005 Nov]Ant Counting 数蚂蚁【生成函数||dp】

    用生成函数套路推一推,推完老想NTT--实际上把这个多项式乘法看成dp然后前缀和优化一下即可 #include<iostream> #include<cstdio> using ...

  2. 1630/2023: [Usaco2005 Nov]Ant Counting 数蚂蚁

    2023: [Usaco2005 Nov]Ant Counting 数蚂蚁 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 85  Solved: 40[S ...

  3. BZOJ2023: [Usaco2005 Nov]Ant Counting 数蚂蚁(dp)

    题意 题目描述的很清楚...  有一天,贝茜无聊地坐在蚂蚁洞前看蚂蚁们进进出出地搬运食物.很快贝茜发现有些蚂蚁长得几乎一模一样,于是她认为那些蚂蚁是兄弟,也就是说它们是同一个家族里的成员.她也发现整个 ...

  4. 【bzoj2023/1630】[Usaco2005 Nov]Ant Counting 数蚂蚁 dp

    题解: 水题 f[i][j] 前i种用了j个,前缀和优化就可以了

  5. BZOJ2023: [Usaco2005 Nov]Ant Counting 数蚂蚁

    2023: [Usaco2005 Nov]Ant Counting 数蚂蚁 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 56  Solved: 16[S ...

  6. bzoj2023[Usaco2005 Nov]Ant Counting 数蚂蚁*&&bzoj1630[Usaco2007 Demo]Ant Counting*

    bzoj2023[Usaco2005 Nov]Ant Counting 数蚂蚁&&bzoj1630[Usaco2007 Demo]Ant Counting 题意: t个族群,每个族群有 ...

  7. bzoj1630 / bzoj2023 [Usaco2005 Nov]Ant Counting 数蚂蚁

    Description     有一天,贝茜无聊地坐在蚂蚁洞前看蚂蚁们进进出出地搬运食物.很快贝茜发现有些蚂蚁长得几乎一模一样,于是她认为那些蚂蚁是兄弟,也就是说它们是同一个家族里的成员.她也发现整个 ...

  8. BZOJ 3385: [Usaco2004 Nov]Lake Counting 数池塘

    题目 3385: [Usaco2004 Nov]Lake Counting 数池塘 Time Limit: 1 Sec  Memory Limit: 128 MB Description     农夫 ...

  9. 【noi 2.6_9289】Ant Counting 数蚂蚁{Usaco2005 Nov}(DP)

    题意:有M个家族的蚂蚁,各Ni只(互相相同).问选出 l~r 只的不同方案数. 解法:很基础的一种DP,不要被"排列组合"所迷惑了啊~我之前接触过这个类型,可惜又忘了,一定要记住! ...

随机推荐

  1. javascript --- 兼容的那些事

    绑定事件 var addEvent = function( obj, type, fn ) { if (obj.addEventListener) obj.addEventListener( type ...

  2. 产品如何进行大屏数据可视化.md

    最近接到一个需求,需要给公司的竞赛平台面对省/校/竞赛进行大屏的可视化话数据展示,闲暇之余对自己最近的工作进行一些总结; 一.数据可视化的定义 数据可视化主要是关于数据_视觉表现形式的科学技术研究 - ...

  3. Keras学习

    参加比赛用到了keras,虽然之前用tensorflow,但是感觉tensorflow的确不太友好,api比较难读,然后就学习keras使用 随着深入,发现keras的api确实比较友好 跑了一些ex ...

  4. 控制CUP占用率曲线

    在<编程之美>上看过一道面试题就是要求:输出cup占用率的曲线图 今天看到了一篇文章就试试看看: #include <iostream> #include <cmath& ...

  5. UVA - 10603 Fill(隐式图搜索)

    题目大意:经典的倒水问题. 给你三个瓶子,体积为a,b,c. 刚開始a.b是空的,c是满的,如今要求你到出体积为d的水.倒水的规则为,要么倒水方为空,要么接水方满 问倒到容量为d时,倒水的最小体积是多 ...

  6. 如何使用电骡eMule上传资源

    1 在电脑中创建一个文件夹专门为上传资源使用 在里面放入任意文件并右击显示ED2K链接   链接效果如下 2 登陆verycd网站,并点击上传资源 复制ED2K地址并选择分类  

  7. JSP自己定义标签继承哪个类

    JSP自己定义标签继承哪个类 解:JSP自己定义标签继承TagSupport

  8. android:使用gallery和imageSwitch制作可左右循环滑动的图片浏览器

    为了使图片浏览器左右无限循环滑动 我们要自己定义gallery的adapter 假设要想自己定义adapter首先要了解这几个方法 @Override public int getCount() { ...

  9. NYOJ 722 数独 【DFS】+【预处理】

    数独 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描写叙述 数独是一种运用纸.笔进行演算的逻辑游戏.玩家须要依据9×9盘面上的已知数字,推理出全部剩余空格的数字,并满足每一 ...

  10. Allegro封装的制作

    过孔封装的层次分析: 1.阻焊层Solder Mask:又称绿油层,是PCB上的非布线层,用于制成丝网漏印板,将不需要的焊接的地方涂上阻焊剂.由于焊接PCB时焊锡在高温下的流动性,所以必须在不需要焊接 ...