POJ 3046 Ant Counting(递推,和号优化)
计数类的问题,要求不重复,把每种物品单独考虑。
将和号递推可以把转移优化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(递推,和号优化)相关推荐
- POJ 3046 Ant Counting ( 多重集组合数 经典DP )
题意 : 有 n 种蚂蚁,第 i 种蚂蚁有ai个,一共有 A 个蚂蚁.不同类别的蚂蚁可以相互区分,但同种类别的蚂蚁不能相互区别.从这些蚂蚁中分别取出S,S+1...B个,一共有多少种取法. 分析 : ...
- POJ 3046 Ant Counting
题目链接 题意 一共有T种蚂蚁编号从1 到 T,给出A个蚂蚁序列,问任取n个蚂蚁一共可以组几种集合,求S到B的种类和 AC dp 状态转移方程为: K表示当前蚂蚁的数目 #include <io ...
- 第十一届山东省大学生程序设计竞赛 L. Construction of 5G Base Stations(概率期望,递推前缀和优化)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 第十一届山东省大学生程序设计竞赛 L. Construction of 5G Base Station ...
- POJ 1661 Help Jimmy(递推DP)
思路: 1. 每个板子有左右两端, dp[i][0], dp[i][1] 分别记录左右端到地面的时间 2. 从下到上递推计算, 上一层的板子必然会落到下面的某一层板子上, 或者地面上 总结: 1. 计 ...
- Bailian4017 爬楼梯(POJ NOI0202-3089)【递推】
爬楼梯 问题链接:POJ NOI0202-3089 爬楼梯 总时间限制: 1000ms 内存限制: 65536kB 描述 树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数 例如: ...
- POJ 3734 Blocks 矩阵递推
POJ3734 比较简单的递推题目,只需要记录当前两种颜色均为偶数, 只有一种颜色为偶数 两种颜色都为奇数 三个数量即可,递推方程相信大家可以导出. 最后来个快速幂加速即可. #include< ...
- POJ 2229 Sumsets(递推,找规律)
构造,递推,因为划分是合并的逆过程,考虑怎么合并. 先把N展开成全部为N个1 然后合并,因为和顺序无关,所以只和出现次数有关 情况有点多并且为了避免重复,分类,C[i]表示序列中最大的数为2^i时的方 ...
- poj 2506 Tiling (递推)
http://poj.org/problem?id=2506#include<stdio.h> #include<string.h> int a[260],b[260]; ch ...
- uva11401:Triangle Counting 递推 数学
uva11401:Triangle Counting 题目读不清楚的下场就是多做两个小时...从1-n中任选3个不重复数字(不重复啊!!坑爹啊!)问能组成三角形的有多少个, 显然1~n能组成的三角形集 ...
最新文章
- java-自定义数据排序
- 那些你不知道的单词小秘密
- artDialog ( v 6.0.2 ) content 参数引入页面 html 内容
- 二分查找(一次查找多个相同的值)
- Java 3desede加解密_JAVA加解密11-对称加密算法-DES以及DESede算法
- Windows2003开机后进不了系统
- 问题处理:VMware Workstation和Device / Credential Guard不兼容
- laravel8 微信小程序(实现简单签到功能)
- MCU固件升级的几种Flash划分方式
- idea社区版和企业版区别_idea 社区版开发 springboot及问题
- 第六章-网络可靠性设计
- 读书笔记|从零开始做运营(入门篇)
- MarkDown一些有用的小技巧
- 《高等统计物理学》5:非平衡态统计物理初步
- zz成人笑话四级考试(绝对经典)
- 陕西神木市一煤矿发生事故 已致19人死亡
- 【卷指南】科研工作团队协作避坑指南
- 算法竞赛进阶指南读书笔记——0x05排序
- 基于DSTATCOM无功补偿的风电并网模型
- Pandas之数据标准化
热门文章
- C++ 汇编代码查看
- 我看过的SDN方面的好文章
- mysql timestamp json_mysql中timestamp,datetime,int类型的区别与优劣
- C++_可变参数模板到emplace_back再到construct再到forward
- python各个绘图的作用,深度讲解Python四大常用绘图库的“绘图原理”
- iOS性能优化:Instruments使用实战
- 32位计算机能玩什么游戏,系统32位操作能玩什么游戏?
- R语言命令行写linux,linux命令行下使用R语言绘图实例讲解
- mysql oracle sqlit_【Go语言】连接数据库SQLite、MySQL、Oracle
- c语言程序设计1试卷,(C语言程序设计期末试卷1.doc