題目:
在講述dp演算法的時候,乙個經典的例子就是數塔問題,它是這樣描述的:
有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?
已經告訴你了,這是個dp的題目,你能ac嗎?
input
輸入資料首先包括乙個整數c,表示測試例項的個數,每個測試例項的第一行是乙個整數n(1 <= n <= 100),表示數塔的高度,接下來用n行數字表示數塔,其中第i行有個i個整數,且所有的整數均在區間[0,99]內。
output
對於每個測試例項,輸出可能得到的最大和,每個例項的輸出佔一行。
sample input
157sample output3 88 1 0
2 7 4 4
4 5 2 6 5
30**:#include
#include
int dp[1001][1001];
#define max(a,b) a>b?a:b
using namespace std;
int main(int i,int j)
{int t;
int n;
cin>>t;
while(t--)
{cin>>n;
for(i=0;i>dp[i][j];
for(i=n-1;i>=0;i--)
for(j=0;j<=i;j++)
dp[i][j]+=max(dp[i+1][j+1],dp[i+1][j]);
cout<
感想:要表示這個狀態方程比較簡單,從下往上:dp[i][j]+=dp[i+1][j+1],dp[i+1][j]從上往上呢:dp[i][j]+=max(dp[i-1][j-1],dp[i-1][j];但是從上往下你還要判斷兩邊界的值,當它處於左邊界的時
有dp[i][0]+=dp[i-1][0];右邊界則是dp[i][i]+=dp[i-1][j-1];
動態規劃 什麼是動態規劃?
先來看看 資訊學奧賽一本通第5版 是怎麼說的 動態規劃程式設計是對解最優化問題的一種途徑 一種方法,而不是一種特殊演算法。不像前面所述的那些搜尋或數值計算那樣,具有乙個標準的數學表示式和明確清晰的解題方法。動態規劃程式設計往往是針對一種最優化問題,由於各種問題的性質不同,確定最優解的條件也互不相同,...
mysql動態規劃 動態規劃
動態規劃 能夠動態規劃的問題具有以下特點 可分解成規模更小的子問題 子問題的結果可復用 關鍵是要理解狀態轉移方程的含義就好啦!數字三角形 問題描述 在數字三角形尋找從頂到底的路徑,使得路徑經過的數字之和最大。規定每一步只能往左下或右下走,求出最大路徑和。遞迴解法 include include us...
51NOD 1006 最長公共子串行 動態規劃
給出兩個字串a b,求a與b的最長公共子串行 子串行不要求是連續的 比如兩個串為 abcicba abdkscab ab是兩個串的子串行,abc也是,abca也是,其中abca是這兩個字串最長的子串行。input 第1行 字串a 第2行 字串b a,b的長度 1000 output 輸出最長的子串行...