有這樣一道題,稱為數塔。
font size: ← →
在講述dp演算法的時候,乙個經典的例子就是數塔問題,它是這樣描述的:
有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?
已經告訴你了,這是個dp的題目,你能ac嗎?
輸入資料首先包括乙個整數c,表示測試例項的個數,每個測試例項的第一行是乙個整數n(1 <= n <= 100),表示數塔的高度,接下來用n行數字表示數塔,其中第i行有個i個整數,且所有的整數均在區間[0,99]內。
對於每個測試例項,輸出可能得到的最大和,每個例項的輸出佔一行。
在基地培訓的時候,我們了解到這樣一種演算法,從問題的相反方向出發,就能使問題變得更簡便。
在考慮這道題時,我們可以先從下面解決,例如,從第4行的2往下走,當然走到19得到的和更大,於是我們就把2變成2+19;從18往下走,最大值為18+10;以此類推,我們可以把第四行全部用該點到下一行的和的最大值替換。在往上用同樣的方法進行,直到第一行,我們就得到了和的最大值。
**如下:
#includeint main()
} printf("%d\n",number[0][0]);
} return 0;
}
此為正解。 DP演算法實踐
情形一 題目 題面大概意思就是要找到最大和的子數列,並且輸出其和,其起始索引 1,其終止索引 1 做這道題時,我一開始的思路是 直接暴力遍歷找到所求解 上 define crt secure no warnings include using namespace std int p 100005 i...
MPI實踐 ParallelRank程式
每乙個程序隨機產生乙個數字儲存在本地,然後對比所有程序所包含的整個數字集,進行排序然後分發,最後將排序號輸出。輸入輸出如圖 整個程式所要做的就是收集所有程序產生的乙個隨機數,然後進行排序,最後將排序結果傳送給各自程序,最後將排序結果發回各程序並進行輸出。隨機數可以用rand 產生,用mpi gath...
網絡卡驅動程式實踐
一 虛擬網絡卡的實現 在linux系統中,新增乙個網路裝置大致需要以下步驟。1 分配乙個網路裝置結構體 alloc a net device struct vnet dev alloc netdev 0,eth d ether setup 2 註冊這個網路裝置 register netdev vne...