小試牛刀(一)

2021-08-28 03:01:23 字數 2606 閱讀 7372

1、有10張餅,每天至少吃一張,問第三天吃完的概率(36/512)

思路:這裡的三天吃完,是指恰巧第三天吃完;那麼第一天最多吃8張,剩下兩天對應的只有1種情況,第一天吃7張,剩下兩天對應的有2種情況,第一天吃6張,剩下兩天對應的有3種情況,同理依次類推:1+2+3+4+5+6+7+8=36。

10張餅一共有多少種吃髮?可以第1天吃完,可以兩天吃完,可以三天吃完......最多十天吃完。

方法一:可以暴力一下,第一天吃完的情況,第二天吃完的情況,第三天吃完的情況,第四天吃完的情況......第十天吃完的情況。**如下所示。

#include using namespace std;

int main()

for(int j=1;j<=10-i;j++)

for(int k=1;k<=10-i-j;k++)

for(int l=1;l<=10-i-j-k;l++)

for(int m=1;m<=10-i-j-k-l;m++)

for(int n=1;n<=10-i-j-k-l-m;n++)

for(int o=1;o<=10-i-j-k-l-m-n;o++)

for(int p=1;p<=10-i-j-k-l-m-n-o;p++)

for(int q=1;q<=10-i-j-k-l-m-n-o-p;q++)

for(int r=1;r<=10-i-j-k-l-m-n-o-p-q;r++)}}

}}}}

}}}}

//512

cout方法二:動態歸回,在方法一種不難發現,比如第n天恰好吃完m張餅的情況=第n-1天吃小於m-1張餅的情況和。

dp[i,j]=dp[i-1][i...j-1],如dp[3,10]表示第3天恰巧吃10張餅的情況,那麼等於第2天吃小於10張餅的所有情況之和。

第2天最少吃2張餅,1種情況,那麼第3天對應吃8張,

第2天吃3張餅的情況是2種,那麼對應第3天吃餅是7張,

第2天吃4張餅的情況是3種,那麼對應第3天吃餅是6張,

第2天吃5張餅的情況是4種,那麼對應第3天吃餅是5張,

第2天吃6張餅的情況是5種,那麼對應第3天吃餅是4張。

第2天吃7張餅的情況是6種,那麼對應第3天吃餅是3張。

第2天吃8張餅的情況是7種,那麼對應第3天吃餅是2張。

第2天吃9張餅的情況是8種,那麼對應第3天吃餅是1張。dp[3,10]=36

吃完十張餅的情況:dp[1,10]+dp[2,10]+dp[3,10]+dp[4,10]+dp[5,10]+dp[6,10]+dp[7,10]+dp[8,10]+dp[9,10]+dp[10,10]=512(表示第一天吃完10張餅的情況+第i天吃完10張餅的情況+第十天吃完10張餅的情況)

動態轉移方程:dp[i][j]=dp[i][j-1]+dp[i-1][j-1](dp[i][j-1]=前一天的前j-2張餅的所有情況)

2、輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,合成後的鍊錶滿足單調不減原則。

思路:三個while迴圈即可,後兩個while迴圈用乙個三木運算子替代了。時間複雜度應該是o(n+m),有頭結點,pa和pb分別指向第乙個節點,pc指向的是頭結點。

void mergelist(linklist &a,linklist &b,linklist &c)

else

}pc->next=pa?pa:pb;

free(b);

}

3、輸入一顆二叉樹的節點和乙個整數,列印出二叉樹中節點的值和為輸入整數的所有路徑。路徑定義為從樹的根節點開始往下直到葉子節點所經過節點形成的一條路徑。

如上圖二叉樹和輸入乙個整數22,那麼結果:

1->2->7->12、1->3->5->13、1->3->4->14

思路:其實以前遇到過,但是是求情況,沒有要求列印每種情況的路徑。注意在遞迴的時候遞迴到葉子節點之後,還會遞迴到葉子節點的左右子樹,不過只是空操作,但是這個流程是存在的。這裡的剪枝沒有最優化,其實還可以根據sum的值來進行剪枝。

#includeusing namespace std;

int a[16]=; //15個結點

int x=22;

int count=0;

void dfs(int o,int n,int sum)

dfs(2*o,n,sum);

dfs(2*o+1,n,sum);

}int main();

//15個結點

int x=22;

int count=0;

void dfs(int o,int n,int sum)

cout<

}dfs(2*o,n,sum);

dfs(2*o+1,n,sum);

//該節點的左右子樹都遞迴完畢了,才能移除

ans.erase(ans.begin()+ans.size()-1);

}int main()

SSE小試牛刀(一)

sse絕對是優化神器之一,是由英特爾所提出的cpu指令集,具有intel sse指令集支援的處理器有8個128位的暫存器,每乙個暫存器可以存放4個 32位 單精度的浮點數,sse的英文全稱 stream simd extentions,而simd的英文全稱 single instruction mu...

boost graph lib 小試牛刀

最近要做社會網路的社群發現,發現用bgl能減少不少 量。經過一番調研發現bgl封裝的很牛叉,dijkstra等演算法統統具備,奈何自己對泛型程式設計不太熟,遇到問題還是很糾結。primer泛型程式設計 演算法部分和stl原始碼分析接下來有時間一定要讀下。下面僅以鄰接鍊錶和自定義節點為例 typede...

Anti Debug 小試牛刀

本文整理了日常生活中遇到的一些anti debug技術,除非特殊說明,均適用於mac ios開發 作為第一篇正式博文,會不定期更新,謝謝大家.123 4567 89 define pt deny attach 31 include intmain 程式正常執行,會輸出hello 但是程式載入到gdb...