這道題目並不能直接使用遞迴,因為
7(1)
7(1) 7(1)
7(1) 7(2) 7(1)
7(1) 7(3) 7(3) 7(1)
7(1) 7(4) 7(6) 7(4) 7(1)
假設題目中的資料是這樣子的,小括號內代表著每個數被遞迴呼叫的次數。
這個三角實際上是乙個楊輝三角,它的和為 2^n -2 ,題目中的層數大小是100以內,那最大的話就要算到 2^100 ,
這已經不是超時的問題了,汗顏。
那怎麼辦呢?我們只需要將每次用到的值它的最大值存起來,等著返回的時候,讓上層的遞迴直接使用就可以了。
這樣的話複雜度就是等差數列,就是n(n-1)/2,所以這次就不用等到宇宙毀滅了。
#include #include #define max 101
using namespace std;
int n,d[max][max];
int maxsum[max][max];
int maxsum(int i,int j)
if (i==n)
else
return maxsum[i][j];
}int main()
} cout
}
POJ 1163 動態規劃
題目演算法 動態規劃 可參考我的部落格 遞迴邊界 當遍歷到最後一行時 狀態轉移方程 sum i j max maxsum i 1,j maxsum i 1,j 1 num i j 遞迴的思路就是從上到下一直遍歷,直到到達邊界為止。c語言的ac 如下 peking university acm 116...
poj 1163 動態規劃
這道題目並不能直接使用遞迴,因為 7 1 7 1 7 1 7 1 7 2 7 1 7 1 7 3 7 3 7 1 7 1 7 4 7 6 7 4 7 1 假設題目中的資料是這樣子的,小括號內代表著每個數被遞迴呼叫的次數。這個三角實際上是乙個楊輝三角,它的和為 2 n 2 題目中的層數大小是100以內...
poj1163 數字三角形 動態規劃
1.記憶遞迴型 自頂向下 d i j 來存數字 典型的遞迴問題 d r,j 出發,下一步只能走d r 1,j 或者d r 1,j 1 故對於n行的三角形 if r n maxsum r,j d r,j else maxsum r,j max maxsum r 1,j maxsum r 1,j 1 d...