bzoj 1002 輪狀病毒 打表

2021-07-24 02:43:09 字數 1493 閱讀 4062

一眼看到資料範圍,輸入只有1個n,n<100果斷打表。然而好像跑錶的複雜度不茲磁啊,要跑幾年。所以要打表找規律。

#include//這是小資料打表

#include

using

namespace

std;

struct eb[100005];

int cnt,n;

int use[100005];

int fa[100005];

int find(int x)

int ans;

void dfs(int x,int k)

}if(h) ans++;

return ;

}if(x>cnt) return ;

use[k+1]=x;

dfs(x+1,k+1);

dfs(x+1,k);

}int main()

; b[++cnt]=(e);

for(int i=1;i<=n;i++)

b[++cnt]=(e);

dfs(1,0);cout

<" "

1 12 5

3 16

4 45

5 121

6 320

7 841

8 2205

9 5776

10 15125

11 39601

12 103680

13 271441

14 710645

15 1860496

16 4870845

17 12752041

18 33385280

*/

我打出n<=17的答案,想起在某學堂講過自動找規律機,但我當時在頹廢,於是硬生生的用眼瞪出了規律,合理猜想,大膽假設。對於奇數,答案都是某個數c【i】的平方。c[i]=c[i-2]*3-c[i-4];

對於偶數,答案是某個數c[i]除以5,c[i]=c[i-2]*7-c[i-4]+2;

然後是高精度。

#include

#include

using

namespace

std;

struct big

void pre()

if(a[i]>9)}}

}f[105];

big operator *(big a,int b)

big zero;

big operator *(big a,big b)

big operator -(big a,big b)

}int x=0;

for(int i=a.x;i>=1;i--)

}a.x=x;

return a;

}int main()

else

f[n]=f[n]*5;

f[n].print();

}return

0;}

BZOJ 1002 輪狀病毒

time limit 1 sec memory limit 162 mb submit status 給定n n 100 程式設計計算有多少個不同的n輪狀病毒。第一行有1個正整數n。將程式設計計算出的不同的n輪狀病毒數輸出 3 16 第一眼看上去,n 100 不錯 打表 於是就寫了乙個暴力搜尋 可是...

動態規劃 BZOJ 1002 輪狀病毒

time limit 1 sec memory limit 162 mb submit 1947 solved 1056 submit status 第一行有1個正整數n。將程式設計計算出的不同的n輪狀病毒數輸出 3 16題意 給出乙個n各節點的 輪子 圖,中間的節點不算入n中,你要選取一些邊,使得...

bzoj1002 輪狀病毒 遞推 高精度

輪狀病毒有很多變種,所有輪狀病毒的變種都是從乙個輪狀基產生的。乙個n輪狀基由圓環上n個不同的基原子 和圓心處乙個核原子構成的,2個原子之間的邊表示這2個原子之間的資訊通道。如下圖所示 n輪狀病毒的產生規律是在乙個n輪狀基中刪去若干條邊,使得各原子之間有唯一的資訊通道,例如共有16個不 同的3輪狀病毒...