noip模擬賽 蒜頭君的兔子

2022-05-01 09:33:08 字數 1027 閱讀 7011

分析:直接暴力算有30分,像斐波那契那樣推式子算有60分,如果想要得到100分就要用一種數列題的常見優化--矩陣了.

當前的兔子數和十年內的兔子數有關,我們需要1個1*11的矩陣,來記錄當前為0歲、1歲、2歲......兔子的數量,同時還需要乙個快速冪矩陣進行計算.由於一年後a[1] = a[0],a[2] = a[1],......,a[10] = a[9],a[0] = a[1] + a[2] + a[3] + ...... + a[10],很容易構造出矩陣來.

因為矩陣比較複雜,還是推薦用結構體來寫.

#include #include 

#include

#include

using

namespace

std;

const

int mod = 1000000007

;int

t;long

long

print,sum;

struct

node

}s,p,ans;

node mul(node a, node b)

returnc;}

node qpow(node a,

intb)

returnt;}

intmain()

p.a[

10][0] = 1

; ans = mul(s, qpow(p, t - 1

));

for (int i = 0; i <= 10; i++)

sum = (sum + ans.a[0][i]) %mod;

printf(

"%lld\n

", sum);

return0;

}

noip模擬賽 蒜頭君救人

分析 之前的一道模擬賽題是dp dfs,這道題是dp bfs.我們設f stu i j 為當前狀態為stu,走到 i,j 的答案,考慮怎麼設計stu,每個人的狀態有3種 要麼在原地,要麼被揹著,要麼已經到了終點,那麼用乙個3進製數儲存就可以了.下面考慮怎麼轉移,直接遞推肯定是不對的,dfs也不行,只...

noip模擬賽 蒜頭君的樹

分析 這道題問的是樹上整體的答案,當然要從整體上去考慮.一條邊對答案的貢獻是這條邊一端連線的點的個數 另一端連線的點的個數 邊權,可以用一次dfs來統計答案,之後每次更改操作在原答案的基礎上增減就好了.千萬不要傻傻地去求lca.事實證明只有10分.問的是任意兩點最短距離之和,樹上兩個點的最短路徑只有...

蒜頭君的兔子 計蒜客)

蒜頭君的兔子 題意 有個姓蒜的第一年有1對兔子,兔子到第二年之後每年會生一對兔子,到十歲的時候就會gg,為n年後有幾隻兔子。我一開始是直接維護了乙個0 10的陣列,分別表示0 10歲的兔子分別有多少個,每次暴力轉移。includeusing namespace std const int mod 1...