hdu 1757 A Simple Math Problem (构造矩阵解决递推式问题)
题意:有一个递推式f(x)
当 x < 10 f(x) = x.
当 x >= 10 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10)
同时ai(0<=i<=9) 不是 0 就是 1;
现在给你 ai 的数字,以及k和mod,请你算出 f(x)%mod 的结果是多少
思路:线性递推关系是组合计数中常用的一种递推关系,如果直接利用递推式,需要很长的时间才能计算得出,时间无法承受,但是现在我们已知 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10),那么我们可以根据这个式子构造一个矩阵来解决这得问题
Fn=A×Fn-1 ,其中Fn={f(x-10) ,A={0 1 0 0 0 0 0 0 0 0 0
f(x-9) 0 0 1 0 0 0 0 0 0 0 0
f(x-8) 0 0 0 1 0 0 0 0 0 0 0
........ .................
f(x)} 0 a9 a8 a7 ........... a0}
在利用矩阵快速幂一顿套模板,最后得到矩阵ANS,和ANS中的a0' a1'....a9',我们最后的答案就是a0'*f(9)+a2'*f(8)...a9'*f(0);
代码:
#include <cstdio>
#include <cstring>
#include <iostream> using namespace std; typedef long long ll;
const int N=,M=,P=;
//const int MOD=1000000007;
int MOD;
struct Matrix
{
ll m[N][N];
}; Matrix A;
Matrix I; Matrix multi(Matrix a,Matrix b)
{
Matrix ans;
for(int i=;i<N;i++)
{
for(int j=;j<M;j++)
{
ans.m[i][j]=;
for(int k=;k<P;k++)
{
ans.m[i][j]+=a.m[i][k]*b.m[k][j]%MOD;
}
ans.m[i][j]%=MOD;
}
}
return ans;
} Matrix power(Matrix a,int k)
{
Matrix ans=I,p=a;
while(k)
{
if(k&)
{
ans=multi(ans,p);
}
k>>=;
p=multi(p,p);
}
return ans;
} int main(int argc, char const *argv[])
{
int a[];
ll k;
while(scanf("%lld %lld",&k,&MOD)!=-)
{
for(int i=;i<;i++)
{
scanf("%d",&a[i]);
}
for(int i=;i<N;i++)
{
for(int j=;j<M;j++)
{
I.m[i][j]=;
if(i==j)
{
I.m[i][j]=;
}
}
}
for(int i=;i<N-;i++)
{
for(int j=;j<M;j++)
{
A.m[i][j]=;
if(i+==j)
{
A.m[i][j]=;
}
}
}
A.m[N-][]=;
for(int i=;i<N;i++)
{
A.m[N-][i]=a[-i];
}
Matrix ans = power(A,k-);
ll num=;
for(int i=N-;i>=;i--)
{
num=(num+ans.m[N-][i]*(i-))%MOD;
}
cout<<num<<endl;
}
return ;
}
hdu 1757 A Simple Math Problem (构造矩阵解决递推式问题)的更多相关文章
- HDU 1757 A Simple Math Problem 【矩阵经典7 构造矩阵递推式】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=1757 A Simple Math Problem Time Limit: 3000/1000 MS (J ...
- hdu 1757 A Simple Math Problem (乘法矩阵)
A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- HDU 1757 A Simple Math Problem (矩阵乘法)
A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- HDU 1757 A Simple Math Problem(矩阵高速幂)
题目地址:HDU 1757 最终会构造矩阵了.事实上也不难,仅仅怪自己笨..= =! f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + -- + a9 ...
- HDU 1757 A Simple Math Problem(矩阵快速幂)
题目链接 题意 :给你m和k, 让你求f(k)%m.如果k<10,f(k) = k,否则 f(k) = a0 * f(k-1) + a1 * f(k-2) + a2 * f(k-3) + …… ...
- hdu 1757 A Simple Math Problem(矩阵快速幂乘法)
Problem Description Lele now is thinking about a simple function f(x). If x < f(x) = x. If x > ...
- hdu 1757 A Simple Math Problem (矩阵快速幂)
Description Lele now is thinking about a simple function f(x). If x < 10 f(x) = x. If x >= 10 ...
- hdu 1757 A Simple Math Problem (矩阵高速幂)
和这一题构造的矩阵的方法同样. 须要注意的是.题目中a0~a9 与矩阵相乘的顺序. #include <iostream> #include <cstdio> #include ...
- hdu 1757 A Simple Math Problem (矩阵快速幂,简单)
题目 也是和LightOJ 1096 和LightOJ 1065 差不多的简单题目. #include<stdio.h> #include<string.h> #include ...
随机推荐
- devexpress控件layoutview特效之一旋转木马的实现
1.devexpress有很多很好的特效,最近做了个旋转木马的特效,给大家分享下.效果图如下: 2.这里的控件为gridcontrol,里面的view为layoutview.数据绑定的代码与其他gri ...
- HTTP严格安全传输(HTTP Strict Transport Security, HSTS)chromuim实现源码分析(二)
HTTP严格安全传输(HTTP Strict Transport Security, HSTS)chromuim实现源码分析(一) 下面来查看其他对保存HSTS信息的enabled_sts_hosts ...
- ABP Zero 单部署,单数据库,多租户架构
首先,我们应该定义多租户系统中的两个条目: 租主(Host):租主是单例的(只有一个租主).租主会对创建和管理租户负责.因此,一个“租主用户”比所有的租户等级更高,并独立于所有租户,同时还能控制他们. ...
- Jquery中的重置
提交表单是像下面这样的:代码 $('#myform').submit() $('#myform').submit() 所以,想当然的认为,重置表单,当然就是像下面这样子喽:代码 $('#myform ...
- 关于Java空指针的控制(转)
1)在已经的String(字符串)调用 equal()和 equalsingnoreCase()而不是未知的对象 通常在已经的非空字符串在调用equals().因为equal()方法是对称的,调用a. ...
- SIFT中的高斯模糊
高斯模糊是众多模糊算法中的一种,所谓的模糊,就是平滑图像,消除像素之间的差异,最容易想到的方法就是均值平滑. .均值模糊 均值模糊就是取目标像素周围像素的平均值.譬如 像素矩阵. |1|1|1| |1 ...
- 1131: [POI2008]Sta
1131: [POI2008]Sta Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 783 Solved: 235[Submit][Status] ...
- 关于vue-clidown到本地后,拷贝文件库到另外一台电脑上npm run dev编译报错的处理
这些天自己在用vue-cli项目,在家里的电脑下下来后写了一些demo,拿到公司继续开发的时候发现删除node_modules文件,运行npm install和npm run 百度,搜狗了好久都没有找 ...
- 我的第一个webapiDemo
最近在面试,总是被问到有没有接触过webapi 或者问webapi和MVC 的区别,今天看了看,原来如此,自己理解感觉webapi和webservice一样像是实现soa 的一种形式,也可以理解为服务 ...
- 深入理解java String 及intern
一.字符串问题 字符串在我们平时的编码工作中其实用的非常多,并且用起来也比较简单,所以很少有人对其做特别深入的研究.倒是面试或者笔试的时候,往往会涉及比较深入和难度大一点的问题.我在招聘的时候也偶尔会 ...