分析:直接暴力算有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...