题目

描述

蚂蚁山上有T(1<=T<=1,000)种蚂蚁,标记为1..T,每种蚂蚁有N_i只蚂蚁(1<=N_i<=100),现有A(A<=5000)只蚂蚁,从中选出S,S+1,…,B(1<=S<=B<=A)只蚂蚁一共有多少种选法?

如有5只蚂蚁分别为{1,1,2,2,3},一共有3种蚂蚁,每一种蚂蚁的数量分别为2,2,1,以下是选不同数量蚂蚁的方法:

1个蚂蚁3种选法 : {1}{2}{3}

2个蚂蚁5种选法 : {1,1}{1,2}{1,3}{2,2}{2,3}

3个蚂蚁5种选法 : {1,1,2}{1,1,3}{1,2,2}{1,2,3}{2,2,3}

4个蚂蚁3种选法 : {1,2,2,3}{1,1,2,2}{1,1,2,3}

5个蚂蚁1种选法 : {1,1,2,2,3}

你的任务是从中选S..B只蚂蚁的方法总和。

输入

第一行: 4个空格隔开的整数: T, A, S和B;

第2到A+1行:每行一个整数表示蚂蚁的种类。

输出

输出从A只蚂蚁中选出S..B只蚂蚁的方法数,答案保留后6位。

样例输入

3 5 2 3
1
2
2
1
3

样例输出

10

大意

有 A 个 T 种物品,求取 \(i \in [S,B]\)共有多少种方法,答案取模 1000000

题解

首先用一个桶存储存每种蚂蚁的数量,设为 x[] 。

60分左右

动态规划,设 F[i][j] 为前 i 种物品选 j 个的方案数。则

\(F_{0,0}=1\)

\(F_{i,j}=\sum_{k=0}^{\min{(j,x_i)}} F_{i-1,j-k}\)

但是这样的时间复杂度是 \(O(T\sum x_i)\) ,会超时。

满分

上面的 \(F[i][]\) 都是从 \(F[i-1][]\) 得来的,因此我们想到了前缀和

设 \(S[i][j]\) 表示前 i 种物品取 0~i 个时的方案总和

前缀和我们并不陌生, \(S_{i,j}=S_{i,j-1}+F_{i,j}\)

那怎么求 \(F[i][j]\) 呢?

60 分做法时的公式得知,\(F[i][j]\) 等于 \(F[i-1][j-k]\) 到 \(F[i-1][j]\) 的和

这一段和就是 \(S_{i-1,j}-S_{i-1,j-k-1}\) ,也就是 \(S_{i-1,j}-S_{i-1,j-\min(x[i],j)-1}\)

最后注意初始化

\(S[2\textit{~}A][0]=1\)

\(S[0][0\textit{~}T]=\min{(x[1],0\text{~}T)+1}\)

就可以通过了

标程

#include<bits/stdc++.h>
#define rg register int
using namespace std;
const int mod=1000000;
int n,m,l,r,t,x[5005],f[1005][5005],s[1005][5005],ans;
int main(){
freopen("ants.in","r",stdin);
freopen("ants.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&l,&r);
for(rg i=1;i<=m;i++) scanf("%d",&t),++x[t];
for(rg i=0;i<=m;i++) s[1][i]=min(i,x[1])+1;
for(rg i=2;i<=n;i++){
s[i][0]=1;
for(rg j=1;j<=m;j++){
f[i][j]=(s[i-1][j]-s[i-1][j-min(x[i],j)-1])%mod;
s[i][j]=(s[i][j-1]+f[i][j])%mod;
}
}
for(rg i=l;i<=r;i++) ans=(ans+f[n][i])%mod;
printf("%d",ans);
}

【动态规划】统计蚂蚁 (ants)的更多相关文章

  1. 【XSY2558】圆上的蚂蚁 Ants on circle

    Description L个点围成一个圆. 我们选定任意一个点作为原点, 则每个点的坐标为从原点顺时针走到这个点的距离. 圆上有N只蚂蚁, 分别被编号为1到N. 开始时, 第ii只蚂蚁在坐标为Xi的点 ...

  2. AtCoder Grand Contest 013

    这场打得蛮菜的,很晚才出BC,还一堆罚时…… A - Sorted Arrays 题目大意:将给定数列划分成单调不增或单调不减的区间,求最少区间数. 贪心即可. #include<cstdio& ...

  3. PyTorch专栏(五):迁移学习

    专栏目录: 第一章:PyTorch之简介与下载 PyTorch简介 PyTorch环境搭建 第二章:PyTorch之60分钟入门 PyTorch入门 PyTorch自动微分 PyTorch神经网络 P ...

  4. hihocoder1241 Best Route in a Grid

    题目链接:hihocoder 1241 题意: n*n的格阵,每个方格内有一个数字.蚂蚁从左上角走到右下角,数字是零的方格不能走,只能向右向下走.蚂蚁走的路径上全部方格的的乘积为s,要使s低位0的个数 ...

  5. css 揭秘-读书笔记

    css 揭秘 [希]Lea verou 著 css 魔法 译 该书涵盖7大主题,47个css技巧,是css进阶必备书籍,开阔思路,探寻更优雅的解决方案.这本书完全用css渲染出的html写成的(布局. ...

  6. 8 November in 614

    我开始看心灵鸡汤了-- 每当在书中读及那些卑微的努力,都觉得感动且受震撼.也许每个人在发出属于自己的光芒之前,都经历了无数的煎熬,漫长的黑夜,无尽的孤独,甚至不断的嘲讽和否定,但好在那些踮脚的少年,最 ...

  7. SpringDataRedis入门到深入

    一:简介 SpringDataRedis是SpringData开源项目中的一部分,它可以在Spring项目中更灵活简便的访问和操作Redis:原先在没有SpringDataRedis时往往使用Jedi ...

  8. [ACM_模拟] UVA 10881 Piotr's Ants[蚂蚁移动 数组映射 排序技巧]

    "One thing is for certain: there is no stopping them;the ants will soon be here. And I, for one ...

  9. [CareerCup] 7.2 Ants on Polygon 多边形上的蚂蚁

    7.2 There are three ants on different vertices of a triangle. What is the probability of collision ( ...

随机推荐

  1. xml中的<![CDATA[]]>和转义字符

    被<![CDATA[]]>这个标记所包含的内容将表示为纯文本,比如<![CDATA[<]]>表示文本内容"<". 此标记用于xml文档中,我们先 ...

  2. 搭建 LNMP 环境

    搭建 LNMP 环境 搭建 Nginx 静态服务器 安装 Nginx 使用 yum 安装 Nginx: yum install nginx -y 修改 /etc/nginx/conf.d/defaul ...

  3. 将子分支代码merge到主分支master分支

    1.首先切换到子分支: git checkout develop2.使用git pull 把分支代码pull下来: git pull3.切换到主分支: git checkout master4.把分支 ...

  4. Make-learning

    Make学习笔记 make是工具,Makefile是指导make工作的文件,而CMake则是生成Makefile的工具 要点: 终极目标是Makefile里面的第一个规则目标 目标下面的命令必须接的是 ...

  5. VsCode 常用插件清单

    插件离线安装说明 在一些内网开发环境中,无法做到在线安装,这个时候就需要对插件进行离线安装 了 打开 VSCode 插件市场网址 Extensions for the Visual Studio fa ...

  6. 论文翻译:2021_Performance optimizations on deep noise suppression models

    论文地址:深度噪声抑制模型的性能优化 引用格式:Chee J, Braun S, Gopal V, et al. Performance optimizations on deep noise sup ...

  7. 挖矿病毒分析(centos7)

    因为我在工作的时候被各种挖矿病毒搞过几次,所以在这里整理下我遇到的病毒以及大神们的解决方案. 服务器中挖矿病毒后,最基本的一个特征就是CPU使用率瞬间飙升,此时可以通过top命令进行查看,确认是否有异 ...

  8. 告别收费BI!如何自己动手做一个免费的可视化数据报表还支持文档在线预览?

    本人大学刚毕业目前在一家互联网公司从事产品运营工作,一季度刚过,公司需要我出一份产品运营数据报表,由于产品用户数据.订单数据等数据量太大,我希望找一款Bi产品,支持我做出一个精美的可视化报表,还可以让 ...

  9. partTwo自动出题程序第二阶段

    (1)题目避免重复: (2)可定制(数量/打印方式): 代码实现 import java.util.ArrayList;import java.util.Random;import java.util ...

  10. 对比学习 ——simsiam 代码解析。

    ​  目录 1 : 事先准备 . 2 : 代码阅读. 2.1: 数据读取 2.2: 模型载入 3 训练过程: 4 测试过程: 5 :线性验证 6 : 用自己数据集进行对比学习. 第一:  改数据集 : ...