【BZOJ4870】组合数问题(动态规划,矩阵快速幂)
【BZOJ4870】组合数问题(动态规划,矩阵快速幂)
题面
题解
显然直接算是没法做的。但是要求的东西的和就是从\(nk\)个物品中选出模\(k\)意义下恰好\(r\)个物品的方案数。\(n\)的范围这么大,往快速幂的方面靠。设\(f[i][j]\)表示从前\(i\)个物品中选了模\(k\)意义下\(j\)个物品的方案数,转移显然,快速幂即可。
时间复杂度\(O(k^3logn)\)。
稍微注意一个细节,\(k=1\)的时候,矩阵的唯一一项不是\(1\),而是\(2\)。所以在构造矩阵的时候不要直接赋值,要加上去。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
#define ll long long
int n,MOD,K,r;
struct Matrix
{
	int s[55][55];
	void clear(){memset(s,0,sizeof(s));}
	void init(){clear();for(int i=0;i<K;++i)s[i][i]=1;}
	int*operator[](int x){return s[x];}
}A;
Matrix operator*(Matrix a,Matrix b)
{
	Matrix ret;ret.clear();
	for(int i=0;i<K;++i)
		for(int j=0;j<K;++j)
			for(int k=0;k<K;++k)
				ret[i][j]=(ret[i][j]+1ll*a[i][k]*b[k][j])%MOD;
	return ret;
}
Matrix fpow(Matrix a,ll b)
{
	Matrix s;s.init();
	while(b){if(b&1)s=s*a;a=a*a;b>>=1;}
	return s;
}
int main()
{
	scanf("%d%d%d%d",&n,&MOD,&K,&r);
	A.init();A[K-1][0]+=1;
	for(int i=1;i<K;++i)A[i-1][i]+=1;
	A=fpow(A,1ll*K*n);
	printf("%d\n",A[0][r]);
	return 0;
}
												
											【BZOJ4870】组合数问题(动态规划,矩阵快速幂)的更多相关文章
- poj 3744 Scout (Another) YYF I - 概率与期望 - 动态规划 - 矩阵快速幂
		
(Another) YYF is a couragous scout. Now he is on a dangerous mission which is to penetrate into th ...
 - hdu 2604 Queuing(动态规划—>矩阵快速幂,更通用的模版)
		
题目 最早不会写,看了网上的分析,然后终于想明白了矩阵是怎么出来的了,哈哈哈哈. 因为边上的项目排列顺序不一样,所以写出来的矩阵形式也可能不一样,但是都是可以的 //愚钝的我不会写这题,然后百度了,照 ...
 - Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)
		
Problem Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...
 - BZOJ2553 Beijing2011禁忌(AC自动机+动态规划+矩阵快速幂+概率期望)
		
考虑对一个串如何分割能取得最大值.那么这是一个经典的线段覆盖问题,显然每次取右端点尽量靠前的串.于是可以把串放在AC自动机上跑,找到一个合法串后就记录并跳到根. 然后考虑dp.设f[i][j]表示前i ...
 - BZOJ5298 CQOI2018交错序列(动态规划+矩阵快速幂)
		
显然答案为Σkb·(n-k)a·C(n-k+1,k).并且可以发现ΣC(n-k,k)=fibn.但这实际上没有任何卵用. 纯组合看起来不太行得通,换个思路,考虑一个显然的dp,即设f[i][j][0/ ...
 - BZOJ4887 Tjoi2017可乐(动态规划+矩阵快速幂)
		
设f[i][j]为第i天到达j号城市的方案数,转移显然,答案即为每天在每个点的方案数之和.矩乘一发即可. #include<iostream> #include<cstdio> ...
 - 【BZOJ2004】公交线路(动态规划,状态压缩,矩阵快速幂)
		
[BZOJ2004]公交线路(动态规划,状态压缩,矩阵快速幂) 题面 BZOJ 题解 看到\(k,p\)这么小 不难想到状态压缩 看到\(n\)这么大,不难想到矩阵快速幂 那么,我们来考虑朴素的\(d ...
 - 【BZOJ1009】GT考试(KMP算法,矩阵快速幂,动态规划)
		
[BZOJ1009]GT考试(KMP算法,矩阵快速幂,动态规划) 题面 BZOJ 题解 看到这个题目 化简一下题意 长度为\(n\)的,由\(0-9\)组成的字符串中 不含串\(s\)的串的数量有几个 ...
 - 【BZOJ4000】[TJOI2015]棋盘(矩阵快速幂,动态规划)
		
[BZOJ4000][TJOI2015]棋盘(矩阵快速幂,动态规划) 题面 BZOJ 洛谷 题解 发现所有的东西都是从\(0\)开始编号的,所以状压只需要压一行就行了. 然后就可以随意矩乘了. #in ...
 
随机推荐
- SelectObject函数
			
SelectObject 函数功能:该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的同样类型的对象. 函数原型:HGDIOBJ SelectObject(HDC hdc, HGDIOBJ ...
 - activiti发布APP时报错:关联的流程无效
			
解决办法: 1.检查流程命名和任务命名以及其他命名中是否有特殊字符,有一些字符是不支持的.(中文是可以的,中文标点符号可能不行,我的经验是顿号会报错) 2.检查流程图,把鼠标放到每一根连接线上,观察它 ...
 - 20155223 Exp3 免杀原理与实践 实验报告
			
20155223 Exp3 免杀原理与实践 实验报告 实验前准备 安装Veil-Evasion 直接使用Kali快速安装命令,拒绝采用git安装命令 apt-get -y install veil-e ...
 - Exp7
			
实验内容 简单应用SET工具建立冒名网站 kali IP: 192.168.1.160 (原198) win7 IP: 192.168.1.199 1.开启本机Apache服务 (1)查看80端口是否 ...
 - Java中枚举的写法和用法
			
在公司代码中,用了一大堆的枚举,看得我好懵逼.下面开始看看枚举怎么写和怎么用. 一.枚举的写法 关于枚举的写法,网上好多这方面的知识.这里直接贴一个我自己写的枚举类的代 ...
 - HTML5 本地存储的用法
			
HTML5 的本地存储 API 中的 localStorage 与 sessionStorage 在使用方法上是相同的,区别在于 sessionStorage 在关闭页面后即被清空,而 localSt ...
 - EZ 2017 12 30 2018noip第二次膜你赛
			
去年的比赛了,然而今天才改好. 总体难度适中,有大佬AK. 主要是自己SB第二题没想出来,然后又是可怜的100来分. T1 一道二分+数学的题目. 我们可以二分叫的次数,然后用公式(等差数列,公差都是 ...
 - 用Spring.Services整合 thrift0.9.2生成的wcf中间代码-复杂的架构带来简单的代码和高可维护性
			
最近一直在看关于thrift的相关文章,涉及到的内容的基本都是表层的.一旦具体要用到实际的项目中的时候就会遇到各种问题了! 比如说:thrift 的服务器端载体的选择.中间代码的生成options(a ...
 - (3)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- Consul服务治理
			
Consul是注册中心,服务提供者.服务提供者.服务消费者等都要注册到Consul中,这样就可以实现服务提供者.服务消费者的隔离. 除了Consul之外,还有Eureka.Zookeeper等类似软件 ...
 - stl源码剖析 详细学习笔记 RB_tree (2)
			
//---------------------------15/03/22---------------------------- //一直好奇KeyOfValue是什么,查了下就是一个和仿函数差不多 ...