计数类的问题,要求不重复,把每种物品单独考虑。

将和号递推可以把转移优化O(1)。

f[i = 第i种物品][j = 总数量为j] = 方案数

f[i][j] = sigma{f[i-1][j-k],(k = [0,min(j,c[i])])}
把和号展开 
f[i][j]  :    j-0,j-1,...,j-a[i]
f[i][j-1] :       j-1,j-2,...,j-a[i]-1
中间部分是一样的可以避免重复计算。

#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<queue>
#include<vector>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
//#include<bits/stdc++.h>
using namespace std;int T, A, S, B;
const int maxt = 1e3+5, maxa = 1e5+5, mod = 1e6;
int f[2][maxa];
int c[maxt];//#define LOCAL
int main()
{
#ifdef LOCALfreopen("in.txt","r",stdin);
#endifscanf("%d%d%d%d",&T,&A,&S,&B);for(int i = A; i--;){int x; scanf("%d",&x);c[x]++;}f[0][0] = f[1][0] = 1; //不选方案数为1for(int i = 1; i <= T; i++){int a = i&1, b = a^1;for(int j = 1; j <= B; j++){if(j-c[i]>0){f[a][j] = ( f[a][j-1] + f[b][j] - f[b][j-1-c[i]] ) % mod;}else {f[a][j] = ( f[a][j-1] + f[b][j] ) % mod;}}}int sum = 0, *F = f[T&1];for(int i = S; i <= B; i++){sum = (sum + F[i]) % mod;}printf("%d\n",sum<0?sum+mod:sum);return 0;
}

转载于:https://www.cnblogs.com/jerryRey/p/4887296.html

POJ 3046 Ant Counting(递推,和号优化)相关推荐

  1. POJ 3046 Ant Counting ( 多重集组合数 经典DP )

    题意 : 有 n 种蚂蚁,第 i 种蚂蚁有ai个,一共有 A 个蚂蚁.不同类别的蚂蚁可以相互区分,但同种类别的蚂蚁不能相互区别.从这些蚂蚁中分别取出S,S+1...B个,一共有多少种取法. 分析 :  ...

  2. POJ 3046 Ant Counting

    题目链接 题意 一共有T种蚂蚁编号从1 到 T,给出A个蚂蚁序列,问任取n个蚂蚁一共可以组几种集合,求S到B的种类和 AC dp 状态转移方程为: K表示当前蚂蚁的数目 #include <io ...

  3. 第十一届山东省大学生程序设计竞赛 L. Construction of 5G Base Stations(概率期望,递推前缀和优化)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 第十一届山东省大学生程序设计竞赛 L. Construction of 5G Base Station ...

  4. POJ 1661 Help Jimmy(递推DP)

    思路: 1. 每个板子有左右两端, dp[i][0], dp[i][1] 分别记录左右端到地面的时间 2. 从下到上递推计算, 上一层的板子必然会落到下面的某一层板子上, 或者地面上 总结: 1. 计 ...

  5. Bailian4017 爬楼梯(POJ NOI0202-3089)【递推】

    爬楼梯 问题链接:POJ NOI0202-3089 爬楼梯 总时间限制: 1000ms 内存限制: 65536kB 描述 树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数 例如: ...

  6. POJ 3734 Blocks 矩阵递推

    POJ3734 比较简单的递推题目,只需要记录当前两种颜色均为偶数, 只有一种颜色为偶数 两种颜色都为奇数 三个数量即可,递推方程相信大家可以导出. 最后来个快速幂加速即可. #include< ...

  7. POJ 2229 Sumsets(递推,找规律)

    构造,递推,因为划分是合并的逆过程,考虑怎么合并. 先把N展开成全部为N个1 然后合并,因为和顺序无关,所以只和出现次数有关 情况有点多并且为了避免重复,分类,C[i]表示序列中最大的数为2^i时的方 ...

  8. poj 2506 Tiling (递推)

    http://poj.org/problem?id=2506#include<stdio.h> #include<string.h> int a[260],b[260]; ch ...

  9. uva11401:Triangle Counting 递推 数学

    uva11401:Triangle Counting 题目读不清楚的下场就是多做两个小时...从1-n中任选3个不重复数字(不重复啊!!坑爹啊!)问能组成三角形的有多少个, 显然1~n能组成的三角形集 ...

最新文章

  1. java-自定义数据排序
  2. 那些你不知道的单词小秘密
  3. artDialog ( v 6.0.2 ) content 参数引入页面 html 内容
  4. 二分查找(一次查找多个相同的值)
  5. Java 3desede加解密_JAVA加解密11-对称加密算法-DES以及DESede算法
  6. Windows2003开机后进不了系统
  7. 问题处理:VMware Workstation和Device / Credential Guard不兼容
  8. laravel8 微信小程序(实现简单签到功能)
  9. MCU固件升级的几种Flash划分方式
  10. idea社区版和企业版区别_idea 社区版开发 springboot及问题
  11. 第六章-网络可靠性设计
  12. 读书笔记|从零开始做运营(入门篇)
  13. MarkDown一些有用的小技巧
  14. 《高等统计物理学》5:非平衡态统计物理初步
  15. zz成人笑话四级考试(绝对经典)
  16. 陕西神木市一煤矿发生事故 已致19人死亡
  17. 【卷指南】科研工作团队协作避坑指南
  18. 算法竞赛进阶指南读书笔记——0x05排序
  19. 基于DSTATCOM无功补偿的风电并网模型
  20. Pandas之数据标准化

热门文章

  1. C++ 汇编代码查看
  2. 我看过的SDN方面的好文章
  3. mysql timestamp json_mysql中timestamp,datetime,int类型的区别与优劣
  4. C++_可变参数模板到emplace_back再到construct再到forward
  5. python各个绘图的作用,深度讲解Python四大常用绘图库的“绘图原理”
  6. iOS性能优化:Instruments使用实战
  7. 32位计算机能玩什么游戏,系统32位操作能玩什么游戏?
  8. R语言命令行写linux,linux命令行下使用R语言绘图实例讲解
  9. mysql oracle sqlit_【Go语言】连接数据库SQLite、MySQL、Oracle
  10. c语言程序设计1试卷,(C语言程序设计期末试卷1.doc