您好,登錄后才能下訂單哦!
小編給大家分享一下c#如何實現數字三角形,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
數字三角形問題。有一個由非負數組成的三角形,如圖所示。
從第一行開始,每次可以往左下或者右下走一格,直到走到最下行,把沿途經過的數全部加起來,如何走才能使得這個和最大?
我們最常規的想法:就是利用回溯發,將每一條路徑都遍歷一遍,然后選出最長的路徑。
此題更高效的算法是動態規劃。把當前位置(i,j)看成一個狀態,然后定義指標函數d(i,j)為從格子(i,j)出發的能得到的最大的和(包括次格子本身),那么本題就轉化成了求d(1,1)。
在動態規劃的題目里,狀態轉移方程無疑是非常重要的,下面我們來看看狀態轉移方程d(i,j)=a(i,j)+max{d(i+1,j),d(i+1,j+1)}其中a(i,j)表示每個圓形的數字
下面給出代碼
#include<iostream> #include<algorithm> using namespace std; int value[4][4]; int dp[4][4]; int main() { for(int i=0;i<4;i++) { for(int j=0;j<=i;j++) cin>>value[i][j]; } for(int i=0;i<4;i++) dp[3][i]=value[3][i]; for(int i=2;i>=0;i--) for(int j=0;j<=i;j++) dp[i][j]=value[i][j]+max(dp[i+1][j],dp[i+1][j+1]); cout<<dp[0][0]; return 0; }
以上是“c#如何實現數字三角形”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。