hdu_2842_Chinese Rings(矩阵快速幂)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2842
题意:解开第k个环需要先解开前(k-2)个环,并留有第(k-1)环。问解开n环最少需要几步。
题解:
设f(n)表示解开第n环。
1. 解开n环不能一下子把n-1全解开了,否则第n个就没法拿掉了。
2. 得先拿掉第n个:先完成f(n-2),然后再拿掉第n环。
3. 然后放回前(n-2),其实这也是f(n-2),因为是一个逆的过程。
4. 最后就变成完成f(n-1)了,所以f(n) = f(n-2)+1 + f(n-2) + f(n-1)。
下面是自己写的矩阵模版:
#include<cstdio>
#define F(i,a,b) for(int i=a;i<=b;i++) const int maxn=,mo=;//矩阵阶数,取余
int N=,n;//N为矩阵实际阶数减1 struct mat{
long long c[maxn][maxn];
void init(){F(i,,N)F(j,,N)c[i][j]=;}
mat operator*(mat b){
mat M; M.init();
F(i,,N)F(j,,N)F(k,,N)M.c[i][j]=(c[i][k]*b.c[k][j]+M.c[i][j])%mo;
return M;
}
mat operator+(mat b){
mat M; M.init();
F(i,,N)F(j,,N)M.c[i][j]=(c[i][j]+b.c[i][j])%mo;
return M;
}
mat operator^(int k){
mat ans,tmp;ans.init();
F(i,,N)F(j,,N)tmp.c[i][j]=c[i][j];
F(i,,N)ans.c[i][i]=;
while(k){
if(k&)ans=ans*tmp;
k>>=,tmp=tmp*tmp;
}
return ans;
}
}A[],ans; int main(){
A[]=(mat){,,,,,,,,},A[]=(mat){,,,,,,,,};
while(~scanf("%d",&n),n){
if(n<=)printf("%d\n",n);
else ans=(A[]^(n-))*A[],printf("%lld\n",ans.c[][]);
}
return ;
}
hdu_2842_Chinese Rings(矩阵快速幂)的更多相关文章
- hdu 2842 Chinese Rings 矩阵快速幂
分析: 后面的环能不能取下来与前面的环有关,前面的环不被后面的环所影响.所以先取最后面的环 设状态F(n)表示n个环全部取下来的最少步数 先取第n个环,就得使1~n-2个环属于被取下来的状态,第n-1 ...
- HDU 2842 Chinese Rings( 递推关系式 + 矩阵快速幂 )
链接:传送门 题意:解 N 连环最少步数 % 200907 思路:对于 N 连环来说,解 N 连环首先得先解 N-2 连环然后接着解第 N 个环,然后再将前面 N-2 个环放到棍子上,然后 N 连环问 ...
- jiulianhuan 快速幂--矩阵快速幂
题目信息: 1471: Jiulianhuan 时间限制: 1 Sec 内存限制: 128 MB 提交: 95 解决: 22 题目描述 For each data set in the input ...
- 矩阵快速幂在ACM中的应用
矩阵快速幂在ACM中的应用 16计算机2黄睿博 首发于个人博客http://www.cnblogs.com/BobHuang/ 作为一个acmer,矩阵在这个算法竞赛中还是蛮多的,一个优秀的算法可以影 ...
- 矩阵快速幂 HDU 4565 So Easy!(简单?才怪!)
题目链接 题意: 思路: 直接拿别人的图,自己写太麻烦了~ 然后就可以用矩阵快速幂套模板求递推式啦~ 另外: 这题想不到或者不会矩阵快速幂,根本没法做,还是2013年长沙邀请赛水题,也是2008年Go ...
- 51nod 算法马拉松18 B 非010串 矩阵快速幂
非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串. 求长度为n的非010串的个数.(对1e9+7取模) ...
- 51nod 1113 矩阵快速幂
题目链接:51nod 1113 矩阵快速幂 模板题,学习下. #include<cstdio> #include<cmath> #include<cstring> ...
- 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】
还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...
- HDU5950(矩阵快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5950 题意:f(n) = f(n-1) + 2*f(n-2) + n^4,f(1) = a , f(2 ...
随机推荐
- java学习 (2)xml操作 SAX(增、删、改、查)
sax是事件驱动的,sax是一种推模式 SAX常用事件: startDocument()----文档开始事件 startElement()-----元素开始事件 charElement()----文本 ...
- sublime text 设置
https://packagecontrol.io/installation#Simple 下载 php 自动补全 点击菜单栏的:Preferences: 选择:Setting-User项: 然后在大 ...
- wxpython 安装教程
wxpython在windows 上的安装,需要在wxpython官网上下载对应的版本:Python分为32和64位系统不是系统的32位和64位 所以可以先在IDE 下输入Python看下当前是32还 ...
- vb.net_介绍
手打 vb.net 是 visual basic.net的简称.提到vb.net,就不能不先提一下vb(Visual Basic) Visaul Basic是windows环境学的一个简单.易学的编程 ...
- PAT 团体程序设计天梯赛-练习集 L1-003. 个位数统计
给定一个k位整数N = dk-1*10k-1 + ... + d1*101 + d0 (0<=di<=9, i=0,...,k-1, dk-1>0),请编写程序统计每种不同的个位数字 ...
- 【LeetCode】24. Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2-&g ...
- 【Python】生成器和递归
l=[1, 2, 3, 4, 5, 6] 如果l求和,毫无疑问可以使用递归,比如可以这样: def sum(l): res = 0 for i in l: if not isinstance(i, l ...
- openwrt 路由器变砖后修复方法
https://wiki.openwrt.org/doc/howto/generic.debrick 变砖后需根据类型进行修复,主要有以下四种: (1)if only something on the ...
- Centos虚拟机安装分区分配
i 安装hadoop虚拟机
- LeetCode OJ 1. Two Sum
Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...