基本思路:

1.先观察规律,写写画画未果

2.写程序暴力打表找规律,找出规律

1-15的答案:1        5        16        45        121

      320    841       2205      5776     15125

      39601    103680    271441     710645       1860496

第1、3、5、7...[奇数位]位是平方数 :

  1*1  4*4  11*11   29*29   76*76   199*199  521*521...

第2、4、6、8...[偶数位]位除以5后也是平方数:

  5*1*1  5*3*3  5*8*8  5*21*21  5*55*55   5*144*144 ...

奇数位:1  3  4  7  11  18  29  47  76...

偶数位:1  2  3  5  8   13  21  34  55...

这个跟一般的斐波那契数列的不同在于初始两个数的值不同以及间隔呈现斐波那契数列的规律

所以求解的时候可以分开来求,也可以整个一块求,整合起来就是F(n)=  3*F(n-1)-  F(n+2)+  2

至于最终的公式是怎么求出来的,我不会,但是有个网站,这上面你可以放有规律数列的前几项,它可以找出规律  https://www.wolframalpha.com/

3.正解是基尔霍夫矩阵,一种无相图转化为方阵并求出生成树个数的定理

证明我还没研究过,最近真的没什么时间,以后补上~

简单介绍下基尔霍夫矩阵:

  • 对于一个无向图 G ,它的生成树个数等于其基尔霍夫Kirchhoff矩阵任何一个N-1阶主子式的行列式的绝对值。
  • 所谓的N-1阶主子式就是对于一个任意的一个 r ,将矩阵的第 r 行和第 r 列同时删去得到的新矩阵。
  • 基尔霍夫Kirchhoff矩阵的一种求法:基尔霍夫Kirchhoff矩阵 K =度数矩阵 D - 邻接矩阵 A,所以这个行列式的值可以用Gauss转换为三角行列式求值即可O(n^3)
  • 度数矩阵D:是一个 N×N 的矩阵,其中

    D[i][j]=0(i≠j)D[i][j]=0(i≠j),D[i][i]=i号点的度数D[i][i]=i号点的度数

  • 邻接矩阵A:是一个 N×N 的矩阵,其中

    A[i][i]=0,A[i][j]=A[j][i]=i,j之间的边数A[i][i]=0,A[i][j]=A[j][i]=i,j之间的边数

  • 然后基尔霍夫Kirchhoff矩阵K=D-A

代码如下:

//暴力代码
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<string>
#include<algorithm>
#include<queue>
#include<vector>
#include<set> using namespace std; typedef long long ll;
typedef long long LL;
typedef pair<int,int> pii;
const int inf = 0x3f3f3f3f;
const int maxn = 200+10;
const ll mod = 1e9+9;
int ans,cnt,n;
int head[maxn],fa[maxn],vis[maxn];
struct Table{
int to,next;
bool ban;
}table[maxn<<2];
void add(int x,int y){
table[cnt].to=y;
table[cnt].next=head[x];
head[x]=cnt++;
}
bool bfs()
{
memset(fa,-1,sizeof(fa));
memset(vis,0,sizeof(vis));
queue<int>q;q.push(0);vis[0]=true;int tot=1;
while(!q.empty()){
int u=q.front();q.pop();
for(int i=head[u];i!=-1;i=table[i].next){
if(!table[i].ban){
int v=table[i].to;
if(v==fa[u]) continue;
if(vis[v]) return 0;
fa[v]=u;
vis[v]=1;
q.push(v);
tot++;
}
}
}
if(tot<=n) return 0;
else return 1;
}
void dfs(int x){
if((x<<1)>=cnt){
if(bfs()){
++ans;
}
return;
}
table[x<<1].ban=table[x<<1|1].ban=0;
dfs(x+1);
table[x<<1].ban=table[x<<1|1].ban=1;
dfs(x+1);
}
int main(){
int num;
scanf("%d",&num);
for(int i=1;i<=num;i++){
ans=0;cnt=0;n=i;
memset(head,-1,sizeof(head));
for(int j=1;j<=i;j++){
add(0,j);add(j,0);add(j,j%n+1);add(j%n+1,j);
}
dfs(0);
cout<<ans<<" ";
}
return 0;
}
//大数规律代码
#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std; typedef long long ll;
const int inf = 0x3f3f3f3f;
const int maxn = 100+10; struct BigInteger{
int arr[maxn];
int len;
BigInteger(){
memset(arr,0,sizeof(arr));
len=0;
}
};
BigInteger Mul(BigInteger a,int k){
for(int i=1;i<=a.len;i++){
a.arr[i]*=k;
}
for(int i=1;i<=a.len;i++){
a.arr[i+1]+=a.arr[i]/10;
a.arr[i]%=10;
}
if(a.arr[a.len+1]!=0) a.len++;
return a;
}
BigInteger Sub(BigInteger a,BigInteger b){
a.arr[1]+=2;
int j=1;
while(a.arr[j]>=10){
a.arr[j+1]++;
a.arr[j]%=10;
j++;
}
//!!!
a.len=max(a.len,j);
for(int i=1;i<=a.len;i++){
a.arr[i]-=b.arr[i];
if(a.arr[i]<0){
a.arr[i]+=10;
a.arr[i+1]--;
}
}
while(a.arr[a.len]==0) a.len--;
return a;
}
int main(){
BigInteger f[maxn];
f[1].arr[1]=1;f[1].len=1;
f[2].arr[1]=5;f[2].len=1;
int n;
scanf("%d",&n);
for(int i=3;i<=n;i++){
f[i]=Sub(Mul(f[i-1],3),f[i-2]);
}
for(int i=f[n].len;i>0;i--){
printf("%d",f[n].arr[i]);
}
printf("\n");
return 0;
}

  

bzoj1002 轮状病毒 暴力打标找规律/基尔霍夫矩阵+高斯消元的更多相关文章

  1. bzoj 1002 [FJOI2007]轮状病毒 高精度&&找规律&&基尔霍夫矩阵

    1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2234  Solved: 1227[Submit][Statu ...

  2. BZOJ 1002: [FJOI2007]轮状病毒【生成树的计数与基尔霍夫矩阵简单讲解+高精度】

    1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 5577  Solved: 3031[Submit][Statu ...

  3. BZOJ1002 FJOI2007 轮状病毒 【基尔霍夫矩阵+高精度】

    BZOJ1002 FJOI2007 轮状病毒 Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原 ...

  4. bzoj 1002 找规律(基尔霍夫矩阵)

    网上说的是什么基尔霍夫矩阵,没学过这个,打个表找下规律,发现 w[i]=3*w[i-1]-w[i-2]+2; 然后写个高精直接递推就行了 //By BLADEVIL var n :longint; a ...

  5. [bzoj1002] [FJOI2007]轮状病毒轮状病毒(基尔霍夫矩阵)

    Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子 和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下 ...

  6. bzoj1002: [FJOI2007]轮状病毒(基尔霍夫矩阵)

    1002: [FJOI2007]轮状病毒 题目:传送门 题解: 决定开始板刷的第一题... 看到这题的时候想:这不就是求有多少种最小生成树的方式吗? 不会啊!!!%题解... 什么鬼?基尔霍夫矩阵?? ...

  7. 【BZOJ】1002:轮状病毒(基尔霍夫矩阵【附公式推导】或打表)

    Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图 ...

  8. BZOJ 4031 HEOI2015 小Z的房间 基尔霍夫矩阵+行列式+高斯消元 (附带行列式小结)

    原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4031 Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可 ...

  9. 无向图生成树计数 基尔霍夫矩阵 SPOJ Highways

    基尔霍夫矩阵 https://blog.csdn.net/w4149/article/details/77387045 https://blog.csdn.net/qq_29963431/articl ...

随机推荐

  1. win7每天出现taskeng.exe进程的解决方案

    安装mysql数据库后电脑经常会出现taskeng.exe进程,这不是木马.病毒,是微软提供的任务计划程序引擎. 禁不禁止都差不多.下面说一下怎么禁止. -->打开控制面板 -->打开管理 ...

  2. Delphi 清理程序内存

    procedure ClearMemory;begin        if Win32Platform = VER_PLATFORM_WIN32_NT then        begin        ...

  3. 20180715-Java String类

    public class StringDemo{ public static void main(String args[]){ char[] helloArray = {'h','e','l','l ...

  4. 微信小程序填坑之路其一:wx.request发送与服务端接受

    一.序言 应公司要求要求,要用小程序开发一个信息录入系统.没办法只能听话来填坑. 先介绍一下环境:客户端——小程序:服务端——java:数据库——mysql:服务器——centos7 需求:客户端输入 ...

  5. 定时任务cron表达式解析

    cron表达式2种: Seconds Minutes Hours DayofMonth Month DayofWeek Year或 Seconds Minutes Hours DayofMonth M ...

  6. centos7systemctl介绍

     Linux中如何启动.重启.停止.重载服务以及检查服务(如 httpd.service)状态  # systemctl start httpd.service # systemctl restart ...

  7. 前端工具【0】—— Emmet插件

    介绍:Emmet是许多流行文本编辑器的插件,它极大地改进了HTML和CSS工作流程 .为大部分流行的编辑器都提供了安装插件,核心是缩写语法+tab键(不同编辑器可自行设置),以下是我整理的常用知识点. ...

  8. oracle12.2 CDB PDB基本管理操作

    容器间切换 切换到对应的PDBSSQL> alter session set container=pdb1;Session altered.SQL> alter database open ...

  9. MATLAB 用 imresize() 函数缩小图象是 double 和 uint8 有差别

    今天发现一个奇怪的现象. 在用 imresize() 缩小图象时,如果图象时 double 格式的,缩小后会产生不连通的现象. 下面是原图: 对这张图象 img 做 simg = imresize(i ...

  10. 升级至webpack4.x踩坑记(热更新局部更新失败的问题修复)

    零.前言 webpack升级的时候,会碰到各种个样的问题,大多数网上都能查到解决方案最简单的方案. 思路如下: 1.把css-loader,xxxloader等依赖都升级到最新 2.根据webpack ...