hdu 2084數塔問題
數塔
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 20246 Accepted Submission(s): 12139
Problem Description 在講述DP演算法的時候,一個經典的例子就是數塔問題,它是這樣描述的:
有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?
已經告訴你了,這是個DP的題目,你能AC嗎?
Input 輸入資料首先包括一個整數C,表示測試例項的個數,每個測試例項的第一行是一個整數N(1 <= N <= 100),表示數塔的高度,接下來用N行數字表示數塔,其中第i行有個i個整數,且所有的整數均在區間[0,99]內。
Output 對於每個測試例項,輸出可能得到的最大和,每個例項的輸出佔一行。
Sample Input 1 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
Sample Output 30
Source DP經典入門題,24k純水,不多說,直接上程式碼
/*從下往上,先求出倒數第二層到倒數第一層的最優解,將5層的數塔降為4層的數塔, 再依次類推,最後的a[1][1]即為最優解*/ #include<stdio.h> int main() { int a[200][200],i,j,t,n; scanf("%d",&t); while(t--) { scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=i;j++) { scanf("%d",&a[i][j]); } } //輸入數塔 for(i=n-1;i>=1;i--) { for(j=1;j<=i;j++) { if(a[i+1][j]>=a[i+1][j+1]) { a[i][j]+=a[i+1][j]; } else a[i][j]+=a[i+1][j+1]; } } /*例如,當i為4時,第四層變為 a[4][1]+=max(a[5][1]+a[5][2]); a[4][2]+=max(a[5][2]+a[5][3]); a[4][3]+=max(a[5][3]+a[5][4]); a[4][4]+=max(a[5][4]+a[5][5]); 這樣就變成了4層的數塔,再一直往上,直到最後變成一層,這時的a[1][1]便是最優解*/ printf("%d\n",a[1][1]); } return 0; }
相關推薦
HDU 2084 數塔 簡單動態規劃
動態 src 2-2 code .cn clas return 技術分享 space 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 題目大意:有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的
hdu 2084 數塔 dp 動態規劃
lan 必須 次循環 AC 如果 sin set main turn 開始動態規劃的學習了,先是比較基礎的,很金典的數塔。附上題目鏈接 http://acm.hdu.edu.cn/showproblem.php?pid=2084 這題的狀態轉移方程是 dp[i][
[遞推簡單dp]-hdu 2084 數塔
[遞推簡單dp]-hdu 2084 數塔 標籤: ACM 題意: 在講述DP演算法的時候,一個經典的例子就是數塔問題,它是這樣描述的: 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少? 已經告訴你了,這是個
hdu--2084 數塔(dp類題目)
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=2084 題意:我最開始以為是搜尋,想從下往上推,結果明顯不行(方案太多了),暴力肯定也是行不通的,所以千思萬想應該從下往上推。 核心方程:a[i][j]=max(a[i][j]+a[i
hdu 2084 數塔 (dp)
很簡單的dp問題。 以下附上ac程式碼 #include<iostream> #include<cmath> #include<cstring> # define max(a,b) ((a)>(b)?(a):(b))//
hdu 2084 數塔(DP)
Problem Description 在講述DP演算法的時候,一個經典的例子就是數塔問題,它是這樣描述的: 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少? 已經告訴你了,這是個DP的題目,你能AC嗎? Input
HUD 1257 最少攔截系統 / HDU 2084 數塔 (DP)
這個星期進入DP專題。 先是基本概念。。(摘抄課件,我自重= =) 動態規劃(Dynamic Programming, DP)是解決某一類問題的一種方法,是分析問題的一種途徑,而不是一種特殊演算法(如線性規劃是一種演算法)。因此,在學習動態規劃時,除了對基本概念和方法正確地理解外,應以豐富的想象力去建
HDU 2084 數塔問題(動態規劃入門)
Description 在講述DP演算法的時候,一個經典的例子就是數塔問題,它是這樣描述的: 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少? 已經告訴你了,這是個DP的題目,你能AC嗎? Input 輸入資
hdu 2084數塔問題
數塔 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 20246 Accepted Submission(
HDU 2084 數塔問題
DP演算法的經典例子 數塔問題 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少? #include<stdio.h> #include<iostream> using namespace std
HDU 2084 數塔 dp
數塔 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 43433 Accepted Submissio
Hdoj 2084.數塔 題解
Problem Description 在講述DP演算法的時候,一個經典的例子就是數塔問題,它是這樣描述的: 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少? 已經告訴你了,這是個DP的題目,你能AC嗎? Input 輸入資料首先包括一個整數C,表示
【杭電100題】【DP_動態規劃】2084 數塔
Problem Description 在講述DP演算法的時候,一個經典的例子就是數塔問題,它是這樣描述的: 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少? 已經告訴你了,這是個DP的題目,你能AC嗎? Input 輸入資料首先包括一
hd 2084 數塔(dp)
原題連結 #include<stdio.h> int main() { int a[110][110],t,n,i,j; while(scanf("%d",&t)!=EOF) { while(t--) {
hdoj——2084數塔
在講述DP演算法的時候,一個經典的例子就是數塔問題,它是這樣描述的: 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少? 已經告訴你了,這是個DP的題目,你能AC嗎? Input 輸入資料首先包括一個
2084 數塔(dp入門)
數塔 Description 在講述DP演算法的時候,一個經典的例子就是數塔問題,它是這樣描述的: 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和
數塔問題-hdu-2084(dp)
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=2084 思路:要求從頂到底的最大值,可以反過來考慮,從底部向上。 只有下面一行的最大值確定,這一行的最大值才能確定。 #include<iostream> #include<cstdi
數塔 HDU 2084——(動態規劃)
思路:從上往下推,數越來越多,結果狀態太多,不好處理;則由下往上推,越往上數越少,最終歸於一個數。 狀態方程:dp[i][j] = max(dp[i+1][j], dp[i+1][j+1])+a[i][j]; C++程式碼實現: #include<stdio.
Re0:DP學習之路 數塔 HDU - 2084(基礎遞推)
解法 首先是輸入的問題,輸入的時候還要注意每一層都有多少個 然後是怎麼求解,一般求解首先要考慮順序,是正序還是倒序 如果這個題是正序的話那麼最終還需要將最後一行進行一次找max的運算 如果是倒序的話那麼最終歸於同一個起點,直接進行輸出即可 轉移方程 轉移方程考慮把問題分散化,分散成小的問題,其中這
動態規劃:數塔問題 hdu 2084 dp
帶備忘錄的自頂向下: #include<iostream> #include<cstring> using namespace std; int tower[101][101