數字三角形2 含絕對值的移動類DP

2021-10-08 14:15:20 字數 1364 閱讀 9607

題目:

描述

乙個數字三角寶塔。

設數字三角形中的數字為絕對值不超過1000的整數。

現規定從最頂層走到最底層,每一步可沿向下或右斜線向下走。

求解從最頂層走到最底層的一條路徑,使得沿著該路徑所經過的數字的總和的絕對值最大,輸出最大值

輸入

輸入資料的第1 行是數字三角形的行數n,1<=n<=1000。

接下來n行是數字三角形各行中的數字。所有數字都小於1000。

輸出

程式執行結束時,將計算出的最大值輸出。

樣例輸入4

13 2

4 10 1

4 3 2 20

輸出24

這道題只是數字三角形的公升級版,在原題中加入了絕對值,如果再用原來的判斷就會有問題,這道題主要就是來解決這個問題。

如普通的的數字三角形還沒有弄懂請看這篇部落格:**

所以隨即我們的第一反應就是給原來的**在計算中加乙個絕對值,細微處理一下即可。

如下面這篇**:

#include

using

namespace std;

int n,a[

110]

[110

],dp[

110]

[110

],ans;

intmain()

} dp[1]

[1]=a[1]

[1];

for(

int i=

2;i<=n;i++

)else}}

for(

int i=

1;i<=n;i++)}

cout

}

於是,我們開始深入思考,上篇**的問題出在只考慮絕對值大小,而沒有關注這個數本身的大小,我們通過負數求最大絕對值就一直求最小值,我們通過正數求最大絕對值就一直求最大值,所以我們可以分別來算最大值和最小值,最後再來比較其絕對值大小。

**如下:

#include

using

namespace std;

int n;

int a[

1100][

1100

],dp[3]

[1100][

1100];

//其實dp第一維大小只需要二,求最大值和最小值, 這裡為了方便**,用1和2來表示

intmain()

數字三角形2

from admin 數字三角形2 描述 description 數字三角形 要求走到最後mod 100最大 輸入格式 input format 第1行n,表示n行 25 第2到n 1行為每個的權值 輸出格式 output format mod 100最大值 樣例輸入 sample input 樣例...

三角形類2

corpyright c 2013,煙台大學計算機學院 all right reseved.完成日期 2014年3月18日 版本號 v1.0 輸入描述 問題描述 三角型類2 程式輸出 問題分析 演算法設計 include include using namespace std class int m...

三角形類2

程式的版權和版本宣告部分 檔名稱 三角形類 作 者 馮冬影 完成日期 2014 年 3月 18 日 版 本 號 v1.0 對任務及求解方法的描述部分 輸入描述 問題描述 三角形類 程式輸出 問題分析 include includeusing namespace std class inline vo...