洛谷 2822 组合数问题——质因数有关的dp
题目:https://www.luogu.org/problemnew/show/P2822
发现 k 都是一样的。所以可以设dp[ i ][ j ]表示 n<=i,m<=j 的答案。发现它就像一个二维平面,所以可以dp[ i ][ j ]=dp[ i-1 ][ j ]+dp[ i ][ j-1 ]-dp[ i-1 ][ j-1 ]+[ c[ i ][ j ]%k==0 ];
先写了记录每个数的阶乘含多少个k,然后看减掉之后还有没有k。但这样没考虑k的因数组成k的情况。所以应该把k质因数分解,看减掉的该因数个数与k里的该因数个数的大小关系。
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- const int N=,M=1e4+;
- int t,k,n[M],m[M],mxn,mxm,mx,a[N][],dp[N][N],cnt,zs[],nm[];
- int rdn()
- {
- int ret=;char ch=getchar();
- while(ch>''||ch<'') ch=getchar();
- while(ch>=''&&ch<='') ret=(ret<<)+(ret<<)+ch-'',ch=getchar();
- return ret;
- }
- int main()
- {
- t=rdn();k=rdn();
- for(int i=;i<=t;i++)
- n[i]=rdn(),m[i]=rdn(),mxn=max(mxn,n[i]),mxm=max(mxm,m[i]);
- mx=max(mxn,mxm);
- int tmp=k;
- for(int i=;i<=tmp;i++)
- if(tmp%i==)
- {
- zs[++cnt]=i;
- while(tmp%i==)tmp/=i,nm[cnt]++;
- }
- for(int i=;i<=mx;i++)
- for(int j=,s=i;j<=cnt;j++,s=i)
- while(s) s/=zs[j],a[i][j]+=s;//数i含有多少第j个质因数
- // for(int i=1;i<=mx;i++) printf("a[%d]=%d\n",i,a[i]);
- for(int i=;i<=mxn;i++)
- {
- for(int j=;j<=mxm&&j<i;j++)
- {
- dp[i][j]=dp[i][j-]+dp[i-][j]-dp[i-][j-];
- bool flag=;
- for(int o=,d;o<=cnt;o++)
- {
- d=a[i][o]-a[j][o]-a[i-j][o];
- if(d<nm[o]){flag=;break;}
- }
- dp[i][j]+=(!flag);
- // printf("dp[%d][%d]=%d(ai-aj-a(i-j)=%d)\n",i,j,dp[i][j],
- // a[i]-a[j]-a[i-j]);
- }
- for(int j=i;j<=mxm;j++) dp[i][j]=dp[i][j-];
- // printf("dp[%d][%d]=%d\n",i,j,dp[i][j]);
- }
- for(int i=;i<=t;i++)
- printf("%d\n",dp[n[i]][m[i]]);
- return ;
- }
洛谷 2822 组合数问题——质因数有关的dp的更多相关文章
- NOIP 2016 提高组 复赛 Day2T1==洛谷2822 组合数问题
题目描述 组合数表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们可以给出计算 ...
- 洛谷 P6276 - [USACO20OPEN]Exercise P(组合数学+DP)
洛谷题面传送门 废了,又不会做/ll orz czx 写的什么神仙题解,根本看不懂(%%%%%%%%% 首先显然一个排列的贡献为其所有置换环的乘积.考虑如何算之. 碰到很多数的 LCM 之积只有两种可 ...
- 洛谷CF809C Find a car(数位DP)
洛谷题目传送门 通过瞪眼法发现,\(a_{i,j}=(i-1)\text{ xor }(j-1)+1\). 二维差分一下,我们只要能求\(\sum\limits_{i=0}^x\sum\limits_ ...
- 【题解】洛谷P1169 [ZJOI2007] 棋盘制作(坐标DP+悬线法)
次元传送门:洛谷P1169 思路 浙江省选果然不一般 用到一个从来没有听过的算法 悬线法: 所谓悬线法 就是用一条线(长度任意)在矩阵中判断这条线能到达的最左边和最右边及这条线的长度 即可得到这个矩阵 ...
- 洛谷 P2015 二叉苹果树(codevs5565) 树形dp入门
dp这一方面的题我都不是很会,所以来练(xue)习(xi),大概把这题弄懂了. 树形dp就是在原本线性上dp改成了在 '树' 这个数据结构上dp. 一般来说,树形dp利用dfs在回溯时进行更新,使用儿 ...
- 【题解】洛谷P3959 [NOIP2017TG] 宝藏(状压DP+DFS)
洛谷P3959:https://www.luogu.org/problemnew/show/P3959 前言 NOIP2017时还很弱(现在也很弱 看出来是DP 但是并不会状压DP 现在看来思路并不复 ...
- 【洛谷 P4934】 礼物 (位运算+DP)
题目链接 位运算+\(DP\)=状压\(DP\)?(雾 \(a\&b>=min(a,b)\)在集合的意义上就是\(a\subseteq b\) 所以对每个数的子集向子集连一条边,然后答案 ...
- Bzoj3566/洛谷P4284 [SHOI2014]概率充电器(概率dp)
题面 Bzoj 洛谷 题解 首先考虑从儿子来的贡献: $$ f[u]=\prod_{v \in son[u]}f[v]+(1-f[v])\times(1-dis[i]) $$ 根据容斥原理,就是儿子直 ...
- 洛谷 P2059 [JLOI2013]卡牌游戏(概率dp)
题面 洛谷 题解 \(f[i][j]\)表示有i个人参与游戏,从庄家(即1)数j个人获胜的概率是多少 \(f[1][1] = 1\) 这样就可以不用讨论淘汰了哪些人和顺序 枚举选庄家选那张牌, 枚举下 ...
随机推荐
- Pairs of Integers
Pairs of Integers You are to find all pairs of integers such that their sum is equal to the given in ...
- 如何基于EasyDSS体系的全套SDK完成各种场景下的视频应用需求
需求背景 回顾EasyDSS的发展过程,基本上保持的是先局部后系统.先组件后平台的发展方式,一步一步夯实每一个细节功能点,从最基础.最兼容的音视频数据的拉流获取,到高效的.全兼容的数据推流,再到流媒体 ...
- 记录-MySQL中的事件调度Event Scheduler
下面是自己的实例 /*查询event是否开启(查询结果Off为关闭 On为开启)*/show variables like '%sche%'; /*开启/关闭命令(1开启--0关闭)*/set glo ...
- js网页视频播放: vcastr22 、 flowplayer 、 jwplayer
实例结构: 实例1: demo.html <embed src="vcastr22.swf?vcastr_file=../wujiandao.flv" allowFullSc ...
- 【学习】Spring 的 AOP :基于Annotation 的“零配置”方式
转自:http://www.cnblogs.com/jbelial/archive/2012/07/20/2539123.html AOP(Aspect Orient Programming ) , ...
- vuex源码 安装依赖问题
今天下载vuex源码时 安装依赖出现以下问题 > chromedriver@2.32.3 install /Users/bao/Desktop/vue-store/vuex/node_modul ...
- Data Structure Linked List: Detect and Remove Loop in a Linked List
http://www.geeksforgeeks.org/detect-and-remove-loop-in-a-linked-list/ #include <iostream> #inc ...
- 在linux系统下Git源码系统的文件下载
Git是一个开源的分布式版本控制系统,在linux系统中下载git中的文件使用repo的很多. 网上有很多repo下载的地址失效,目前可用的链接在这里记录一下. 没有安装git的安装一下: sudo ...
- 20145229吴姗珊两天小总结 《Java程序设计》第4周学习总结
20145229吴姗珊两天小总结 <Java程序设计>第4周学习总结 教材学习内容总结 由于自己的基础不好对知识的理解不透彻,所以这两天的学习还是集中在第六章和第七章,对知识点多了一点理解 ...
- 百度编辑器 Ueditor 如何增加字体 ?
在百度编辑器 Ueditor 如何增加字体 ? 要修改两个文件: 第一个文件:editor-config.js: ,'fontfamily':[ { label:'',name ...