數字三角形問題

2022-02-17 20:01:48 字數 2533 閱讀 2826

1.數字三角形問題1:

•    7

•   3 8

•  8 1 0

• 2 7 4 4

•4 5 2 6 5

•從第一層走到最後一層,每次向左下或右下走,求路徑的最大權值和。

思路:

•如果利用轉移方程求解原問題?

•f[i][j]=max(f[i+1][j],f[i+1][j+1])+a[i][j]

•1、從上向下轉移,即i從小到大?

•2、從下向上轉移,即i從大到小?

•觀察轉移方程的性質

•因為第i行的解要由第i+1行的解得到,所以必須從下向上轉移!!

**:

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9

10using

namespace

std;

1112

#define pi acos(-1.0)

13#define eps 1e-10

14#define lll __int64

15#define ll long long

16#define inf 0x7fffffff

1718

const

int n=100;19

inta[n][n];

2021

intmain()

34return0;

35 }

view code

2.數字三角形問題2:

•某一層可以隨意跳

思路:加一維狀態即可。

解法一:

1 #include 2 #include 3

4using

namespace

std;56

#define pi acos(-1.0)

7#define eps 1e-6

8#define lll __int64

9#define ll long long

10#define inf 0x7fffffff

11#define rep(i,a,b) for(int i=a;i<=b;i++)

12#define dep(i,a,b) for(int i=a;i>=b;i--)

1314

int s[102*103/2],dp[102*103/2][2];//

dp:從第i點起至最後一層且第i點所在層以後(包括該層)是否跳過的最優值(第二維為1表示已跳過)

15int

n,cnt;

1617

intmain()

1831 t=n*(n-1)/2

;32 rep(i,1

,n)33

38 dep(i,n-1,1)39

50}51 printf("

%d\n

",max(dp[1][1],dp[1][0

]));52}

53return0;

54 }

view code

解法二:

1 #include 2 #include 3 #include 4 #include 5

6using

namespace

std;78

#define pi acos(-1.0)

9#define eps 1e-6

10#define lll __int64

11#define ll long long

12#define inf 0x7fffffff

1314

const

int n=100;15

int a[n][n],dp[n][n][2];//

第三維若是1,表示此層之下發生過跳躍。

1617

intmain()

1827

}28 memset(dp,0,sizeof

(dp));

29for(int i=1;i<=n;i++) dp[n][i][0]=a[n][i],dp[n][i][1]=a[n][i];

30for(int i=n-1;i>0;i--)38}

39 printf("

%d\n

",dp[1][1][1

]);40}41

return0;

42 }

view code

樣例:41

3 24 10 1

4 3 2 20

0answer:34

數字三角形問題

數字三角形問題 標籤 動態規劃 雜談分類 演算法設計 34 5 11 9 8 15 21 13 4 這是乙個數字三角形。請編乙個程式計算從頂至底的某處的一條路徑,使該路徑所經過的數字的總和最大。每一步可沿左斜線向下或右斜線向下走 1 三角形行數 200 三角形中的數字為整數0,1,99 輸入格式 第...

數字三角形問題

給定乙個由n行數字組成的數字三角形,設計乙個演算法,計算出從三角形的頂至底的一條路徑,使該路徑經過的數字總和最大。0,0 1,0 1,1 2,0 2,1 2,2 3,0 3,1 3,2 3,3 思路 動態規劃 動態方程 sum i,j a i,j max sum i,j 表示從 i,j 出發時能得到...

數字三角形問題

time limit 1000ms memory limit 65536k 給定乙個由n行數字組成的數字三角形如下圖所示。試設計乙個演算法,計算出從三角形的頂至底的一條路徑,使該路徑經過的數字總和最大。對於給定的由n行數字組成的數字三角形,計算從三角形的頂至底的路徑經過的數字和的最大值。輸入資料的第...