hiho1605 - 递推+1000000000=矩阵快速幂
题目大意
小Hi最近对生成树(包含所有顶点的联通无环子图。)非常的感兴趣,他想知道对于特定的简单平面无向图是不是存在求生成树个数的简单方法。
小Hi定义了这样的图:一个以{0,1,2……n}为顶点的图,顶点0与其他n个顶点直接相连,对于顶点i(1 ≤ i < n),顶点i与顶点i+1连有一条边。下面是小Hi画的图n=4的图:
请求出对于任意n,这样的图的生成树个数。
输入
多组数据,每组数据一行,包括一个整数n
30%的数据(1 ≤ n ≤ 100),组数不超过10组
70%的数据(1 ≤ n ≤ 1000000),组数不超过10组
100%的数据(1 ≤ n ≤ 1000000000),组数不超过10组
输出
每组数据输出一个行包括一个整数,代表了图的生成树个数(对1000000007取模)。
------------------------------------------------------------------------------------------------------------------------------
开始找错了规律,如下图,以为每加一就翻倍,却忘记了右边红框中的两种情况。
唉,考虑问题不全面。
正确的递推公式为:
令:
F(i,0) 为i是孤立的或者(仅与i-1相连)。
F(i,1) 为包括i在内的点全部联通
则
F(i+1,1) = F(i,1)*2 + F(i,0);
F(i+1,0) = F(i,1) + F(i,0);
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
#define MOD 1000000007 struct Mat{
LL data[][];
static Mat unit(){
Mat mat;
mat.data[][]=mat.data[][]=mat.data[][]=;
mat.data[][]=;
return mat;
}
static Mat eye(){
Mat mat;
mat.data[][] = mat.data[][] = ;
return mat;
}
Mat(){ data[][]=data[][]=data[][]=data[][]=; }
Mat operator* (const Mat& another) const{
Mat ret;
ret.data[][]=(data[][]*another.data[][]%MOD+data[][]*another.data[][]%MOD)%MOD;
ret.data[][]=(data[][]*another.data[][]%MOD+data[][]*another.data[][]%MOD)%MOD;
ret.data[][]=(data[][]*another.data[][]%MOD+data[][]*another.data[][]%MOD)%MOD;
ret.data[][]=(data[][]*another.data[][]%MOD+data[][]*another.data[][]%MOD)%MOD;
return ret;
}
}; LL pown(int n){
Mat unit = Mat::unit();
Mat ret = Mat::eye();
while(n){
if(n&) ret = ret * unit;
n>>=; unit = unit * unit;
}
return (ret.data[][]+ret.data[][])%MOD;
} int main(){
int n;
while(scanf("%d",&n)!=EOF){
if(n==) puts("");
else{
printf("%lld\n",pown(n-));
}
}
return ;
}
hiho1605 - 递推+1000000000=矩阵快速幂的更多相关文章
- [HDOJ2604]Queuing(递推,矩阵快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2604 递推式是百度的,主要是练习一下如何使用矩阵快速幂优化. 递推式:f(n)=f(n-1)+f(n- ...
- hihoCoder 1143 : 骨牌覆盖问题·一(递推,矩阵快速幂)
[题目链接]:click here~~ 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 骨牌,一种古老的玩具.今天我们要研究的是骨牌的覆盖问题: 我们有一个2xN的长条形 ...
- HDU - 2604 Queuing(递推式+矩阵快速幂)
Queuing Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- HDU5950 Recursive sequence 非线性递推式 矩阵快速幂
题目传送门 题目描述:给出一个数列的第一项和第二项,计算第n项. 递推式是 f(n)=f(n-1)+2*f(n-2)+n^4. 由于n很大,所以肯定是矩阵快速幂的题目,但是矩阵快速幂只能解决线性的问题 ...
- hdu 5950 Recursive sequence 递推式 矩阵快速幂
题目链接 题意 给定\(c_0,c_1,求c_n(c_0,c_1,n\lt 2^{31})\),递推公式为 \[c_i=c_{i-1}+2c_{i-2}+i^4\] 思路 参考 将递推式改写\[\be ...
- [题解][SHOI2013]超级跳马 动态规划/递推式/矩阵快速幂优化
这道题... 让我见识了纪中的强大 这道题是来纪中第二天(7.2)做的,这么晚写题解是因为 我去学矩阵乘法啦啦啦啦啦对矩阵乘法一窍不通的童鞋戳链接啦 层层递推会TLE,正解矩阵快速幂 首先题意就是给你 ...
- HDU-6185-Covering(推递推式+矩阵快速幂)
Covering Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- hdu 6185 递推+【矩阵快速幂】
<题目链接> <转载于 >>> > 题目大意: 让你用1*2规格的地毯去铺4*n规格的地面,告诉你n,问有多少种不同的方案使得地面恰好被铺满且地毯不重叠.答案 ...
- 【图灵杯 F】一道简单的递推题(矩阵快速幂,乘法模板)
Description 存在如下递推式: F(n+1)=A1*F(n)+A2*F(n-1)+-+An*F(1) F(n+2)=A1*F(n+1)+A2*F(n)+-+An*F(2) - 求第K项的值对 ...
随机推荐
- Core篇——初探依赖注入
目录 1.DI&&IOC简单介绍 2.UML类图中六种关联关系 3..net core 中DI的使用 4..net core DI初始化源码初窥 DI&&IOC简单介绍 ...
- Java基础——环境变量(PATH)和类变量(CLASSPATH)
一.环境变量(PATH) 科普下,环境变量不是java的知识,是windows系统的环境变量. 下面请看怎么查看和修改windows的环境变量 在“我的电脑”右键属性进入后 点击“高级系统设置”(如下 ...
- asp.net中Server.MapPath的使用
http://www.studyofnet.com/news/184.html 本文导读:Server.MapPath()的全名是System.Web.HttpContext.Current.Se ...
- Object-oriented programming
Object-oriented programming (OOP) is a programming paradigm based on the concept of "objects&qu ...
- python3 django动态分页引发的list切片下标越界问题
起先是扒了一个包,动态分页的,但这个包分页之前要加载全部的数据,我这东西后台是个爬虫,不一定浏览的完所以这么做有点浪费资源,于是我改造了一下. # :param obj_count: 获得 条目总数# ...
- Hihocoder1350-Binary Watch
时间限制:10000ms单点时限:1000ms内存限制:256MB 描述 Consider a binary watch with 5 binary digits to display hours ( ...
- jquery queryBuilder过滤插件的使用
1.此插件用于过滤搜索的功能,功能强大,可实现复杂条件过滤,单选多选的等条件的过滤.还可以在插件中调用其他插件. 下载地址和文档阅读:http://querybuilder.js.org/ 效果图: ...
- 注解实战@Test标签
1.创建一个Maven工程 2.点击java,右键-新建一个类 package com.course.testng; import org.testng.annotations.Test; publi ...
- 10、Latent Relational Metric Learning via Memory-based Attention for Collaborative Ranking-----基于记忆注意的潜在关系度量协同排序
一.摘要: 本文模型 LRML(潜在相关度量学习)是一种新的度量学习方法的推荐.[旨在学习用户和项目之间的相关关系,而不是简单的用户和项目之间的push和pull关系,push和pull主要针对LMN ...
- HDU 1205 吃糖果(水题)
链接:传送门 思路:思维僵硬了,僵硬...... 简单的插隔板思想......选出来数量最多的糖果种类X,假设X数量为MAX,然后以X作为"隔板",形成X _ X _ X _ X ...