time limit: 1 sec memory limit: 162 mb
[submit][status][discuss]
輪狀病毒有很多變種,所有輪狀病毒的變種都是從乙個輪狀基產生的。乙個n輪狀基由圓環上n個不同的基原子
和圓心處乙個核原子構成的,2個原子之間的邊表示這2個原子之間的資訊通道。如下圖所示
n輪狀病毒的產生規律是在乙個n輪狀基中刪去若干條邊,使得各原子之間有唯一的資訊通道,例如共有16個不
同的3輪狀病毒,如下圖所示
現給定n(n<=100),程式設計計算有多少個不同的n輪狀病毒
第一行有1個正整數n
計算出的不同的n輪狀病毒數輸出316
每種n輪狀病毒對應著一種不同的生成樹
同樣,n+1個點的生成樹對應著不同的n輪狀病毒
所以 n輪狀病毒的種數 ==
n+1個點,已知每個點可以連出的邊 的生成樹的個數
現在問題轉化為求生成樹的個數
矩陣樹定理即可
但是不寫高精只能做到50分
然後你可以根據這個打表找出規律(我沒找出來)
f[i]=3*f[i-1]-f[i-2]+2
再寫個高精就a了
矩陣樹定理打表**:
#include#includeac**#include
#include
using
namespace
std;
typedef
long
long
ll;int c[101][101
];int
n;void
matrix_tree()
else
if(n==2
)
else
ll ans=1
,t;
for(int i=1;i<=n;i++)
ans*=c[i][i];
}if(ans<0) ans=-ans;
cout
}int
main()
#include#includeusing
namespace
std;
struct
node
node
operator * (int p) const
node
operator -(node p)
a.len=len;
while(len && !a.num[a.len]) len--;
return
a; }
node
operator + (int
p)
void
operator =(node p)
void
print()
};node f[
101];
intmain()
FJOI2007 輪狀病毒
提交傳送門 就是公式嘛 f i f i 1 3 f i 2 description 輪狀病毒有很多變種,所有輪狀病毒的變種都是從乙個輪狀基產生的。乙個n輪狀基由圓環上n個不同的基原子和圓心處乙個核原子構成的,2個原子之間的邊表示這2個原子之間的資訊通道。如下圖所示 n輪狀病毒的產生規律是在乙個n輪狀...
FJOI2007 輪狀病毒
輪狀病毒有很多變種。許多輪狀病毒都是由乙個輪狀基產生。乙個n輪狀基由圓環上n個不同的基原子和圓心的乙個核原子構成。2個原子之間的邊表示這2個原子之間的資訊通道,如圖1。n輪狀病毒的產生規律是在n輪狀基中刪除若干邊,使各原子之間有唯一一條資訊通道。例如,共有16個不同的3輪狀病毒,入圖2所示。給定n ...
2 4 高精度 FJOI2007 輪狀病毒
傳送門 暴力找規律 發現n 1 5時答案是1,5,16,45,121 奇數項是平方數,偶數項是平方數減4 1,5,16,45,121 分別是1 2,3 2 4,4 2,7 2 4,11 2 1,3,4,7,11這個數列有類似於斐波那契數列的性質,只不過前兩項是1和3罷了 那麼我們就可以遞推求這個類斐...