HDU 2842 (递推+矩阵快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2842
题目大意:棒子上套环。第i个环能拿下的条件是:第i-1个环在棒子上,前i-2个环不在棒子上。每个环可以取下或放上,cost=1。求最小cost。MOD 200907。
解题思路:
递推公式
题目意思非常无聊,感觉是YY的。
设$dp[i]$为取第i个环时的总cost。
$dp[1]=1$,$dp[2]=2$,前两个环取下是没有条件要求的。
从i=3开始,由于条件对最后的环限制最大,所以从最后一个环开始取。
$p[3]=5$(先取下第一个环,然后第三个环,然后放上第一个环,然后取下第二个环,然后取下第一个环)
$dp[4]=10$(规律是:取i环花费1,依赖花费$dp[i-1]$、$2*dp[i-2]$)
所以$dp[i]=dp[i-1]+2*dp[i-2]+1$
矩阵快速幂
任何递推数列都能构造矩阵求解,有N个参数的通项公式,至少需要构造$1*N$的矩阵
考虑到矩阵乘法的维数限制$[N,M]*[M,P]$,通常构造成$N*N$的矩阵。
构造方法就是按矩阵乘法的特性,先构造出幂矩阵第一列,然后YY出剩余列。
本题构造如下:
$\begin{bmatrix}f2 & f1 & 1\\ 0 & 0 & 0\\ 0 & 0 & 0\end{bmatrix}\begin{bmatrix}1 & 1&0 \\ 2 & 0&0 \\ 1& 0 &1 \end{bmatrix}=\begin{bmatrix}f3 & f2&1 \\
0 & 0&0 \\ 0& 0 &0\end{bmatrix}$
特判n=1、n=2,从n=3开始,幂(n-2)次,乘以基础f2、f1的矩阵。
代码
- #include "cstdio"
- #include "cstring"
- #define LL long long
- #define mod 200907
- #define K 3
- struct Matrix
- {
- LL mat[K][K];
- Matrix() {memset(mat,,sizeof(mat));}
- Matrix(LL *val)
- {
- int idx=;
- for(int i=;i<K;i++)
- for(int j=;j<K;j++)
- mat[i][j]=val[idx++];
- }
- };
- Matrix operator * (Matrix a,Matrix b)
- {
- Matrix ret;
- for(int i=;i<K;i++)
- for(int j=;j<K;j++)
- {
- ret.mat[i][j]=;
- for(int k=;k<K;k++)
- ret.mat[i][j]+=((a.mat[i][k]*b.mat[k][j])%mod);
- }
- return ret;
- }
- Matrix operator ^ (Matrix a,int n)
- {
- Matrix ret,base=a;
- for(int i=;i<K;i++) ret.mat[i][i]=;
- while(n)
- {
- if(n&) ret=ret*base;
- base=base*base;
- n>>=;
- }
- return ret;
- }
- int main()
- {
- //freopen("in.txt","r",stdin);
- LL n;
- while(scanf("%I64d",&n)&&n)
- {
- if(n==) printf("1\n");
- else if(n==) printf("2\n");
- else
- {
- LL bval[]={,,,,,,,,};
- LL pval[]={,,,,,,,,};
- Matrix Base(bval),Pow(pval),ans=Pow^(n-);
- ans=Base*ans;
- printf("%I64d\n",ans.mat[][]%mod);
- }
- }
- }
HDU 2842 (递推+矩阵快速幂)的更多相关文章
- hdu 2604 递推 矩阵快速幂
HDU 2604 Queuing (递推+矩阵快速幂) 这位作者讲的不错,可以看看他的 #include <cstdio> #include <iostream> #inclu ...
- Recursive sequence HDU - 5950 (递推 矩阵快速幂优化)
题目链接 F[1] = a, F[2] = b, F[i] = 2 * F[i-2] + F[i-1] + i ^ 4, (i >= 3) 现在要求F[N] 类似于斐波那契数列的递推式子吧, 但 ...
- hdu 6185 递推+矩阵快速幂
思路:考虑全部铺满时,前2列的放法.有如下5种情况:(转自http://blog.csdn.net/elbadaernu/article/details/77825979 写的很详细 膜一下) 假设 ...
- HDU Queuing(递推+矩阵快速幂)
Queuing Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- HDU 5950 Recursive sequence 【递推+矩阵快速幂】 (2016ACM/ICPC亚洲区沈阳站)
Recursive sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- [hdu 2604] Queuing 递推 矩阵快速幂
Problem Description Queues and Priority Queues are data structures which are known to most computer ...
- HDU - 6185 Covering(暴搜+递推+矩阵快速幂)
Covering Bob's school has a big playground, boys and girls always play games here after school. To p ...
- HDU6030 Happy Necklace(递推+矩阵快速幂)
传送门:点我 Little Q wants to buy a necklace for his girlfriend. Necklaces are single strings composed of ...
- 五校联考R1 Day1T3 平面图planar(递推 矩阵快速幂)
题目链接 我们可以把棱柱拆成有\(n\)条高的矩形,尝试递推. 在计算的过程中,第\(i\)列(\(i\neq n\))只与\(i-1\)列有关,称\(i-1\)列的上面/下面为左上/左下,第\(i\ ...
随机推荐
- 三、jQuery--jQuery基础--jQuery基础课程--第7章 jQuery 动画特效
1.调用show()和hide()方法显示和隐藏元素 show()和hide()方法用于显示或隐藏页面中的元素,它的调用格式分别为:$(selector).hide(speed,[callback]) ...
- Android Support兼容包详解
原文:http://www.open-open.com/lib/view/open1427852683115.html
- Linux & Oracle 安装目录说明
http://blog.itpub.net/9399028/viewspace-775297/
- GPT vs MBR 分区 ,,, Legacy BIOS vs UEFI BIOS
MBR与GPT两种磁盘分区格式的区别 http://itoedr.blog.163.com/blog/static/120284297201378114053240 GPT Partition Tab ...
- LightOJ 1030 Discovering Gold(期望 概率)
正推,到达i的概率为p[i],要注意除了1和n外,到达i的概率并不一定为1 概率表达式为p[i] += p[j] / min(n - j, 6) 从j带过来的期望为exp[i] += exp[j] / ...
- POJ1285 Combinations, Once Again(背包 排列组合)
背包解组合数学问题,n种物品,每种num[i]个,求取r个的方法数. 背包思想,f[j]表示当前取j个数的方法数,则状态转移方程为 f[j] += f[k](max(j - num[i], 0) &l ...
- 配置ogg异构oracle-mysql(3)目的端配置
目的端配置大致分为如下三个步骤:配置mgr,配置checkpoint table,配置应用进程 在目的端先创建一张表,记得带主键: mysql> create database hr;Query ...
- ARM寄存器学习,王明学learn
ARM寄存器学习 ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器.但是这些寄存器不能被同时访问,具体哪些寄存器是可以访问的,取决ARM处理器的工作状态及具体的运行模式. ...
- 转一篇dudu大人的文章:程序员,用NuGet管理好你的包包
每个女人都有很多包包:其实男人也有,但只有会写程序的男人才有 —— 代码世界中的大“包”小“包”.这些大包小包,有花钱买的,有从开源市场淘的,也有自己或同事亲手制作的. 包包有个特点:容易坏,更新快, ...
- scrollTo 和 scrollBy
涉及到滑动,就涉及到VIEW,大家都知道,Android的UI界面都是由一个一个的View以及View的派生类组成,View作为基类,而常用的布局里面的各种布局就是它派生出来的ViewGroup的 ...