1. 程式人生 > >演算法 數字三角形問題

演算法 數字三角形問題

題目

給定一個由n行數字組成的數字三角形,設計演算法,計算出從三角形的頂至底的一條路徑,使該路徑經過的數字總和最大

測試用例:
5(行數)
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
輸出:30

分析

用二維陣列f[i][j]表示第i行的第j個數能得到的最大值:
f[i][j]=max{f[i-1][j-1],f[i-1][j]}+map[i][j] 其中map是給定值的陣列
每行第一個只能選擇上一行的第一個 f[i][1]=f[i-1][1]+map[i][1];
每行最後一個只能選擇上一行的最後一個 f[i][i]=f[i-1][i-1]+map[i
][i];
#include <iostream>
#define n 5
int f[10][10];

int getmax(int a, int b){
    return a>b?a:b;
}
int main(){
    int i,j,maxValue=0;
    int map[n+1][n+1];
    for(i=1;i<=n;i++){
        for(j=1;j<=i;j++){
            printf("請輸入第%d行,第%d個數:",i,j);
            scanf("%d",&map[i][j]);
        }
    }
    f[1
][1]=map[1][1]; for(i=2;i<=n;i++){ for(j=1;j<=i;j++){ if(j==1) f[i][j]=f[i-1][j]+map[i][j];//每行的第一個 else if(j==i) f[i][j]=f[i-1][j-1]+map[i][j];//每行的最後一個 else f[i][j]=getmax(f[i-1][j-1],f[i-1][j])+map[i][j];//可以有兩種選擇的
} } for(j=1;j<=n;j++){ if(f[n][j]>maxValue) maxValue=f[n][j]; } printf("%d\n",maxValue); return 0; }

相關推薦

演算法 數字三角形問題

題目 給定一個由n行數字組成的數字三角形,設計演算法,計算出從三角形的頂至底的一條路徑,使該路徑經過的數字總和最大 測試用例: 5(行數) 7 3 8 8 1 0 2 7 4 4 4 5

演算法-動態規劃(數字三角形

數字三角形問題 問題描述:給定一個由n行數字組成的數字三角形,如下圖 7 3 8 8 1 0

[藍橋杯]ALGO-124.演算法訓練_數字三角形

  問題描述   (圖3.1-1)示出了一個數字三角形。 請編一個程式計算從頂至底的某處的一條路   徑,使該路徑所經過的數字的總和最大。   ●每一步可沿左斜線向下或右斜線向下走;   ●1<三角形行數≤100;   ●三角形中的數字為整數0,1,…99;

數字三角形問題(簡單動態規劃)-演算法設計與分析

const int maxn=100; int a[maxn][maxn]; int dp[maxn][maxn]; int main() { int n; cin>>n;

演算法學習之動態規劃--數字三角形最大路徑和

題目: 7 3  8 8  1  0 2  7  4  4 4  5  2  6  5 在上面的數字三角形中尋找一條從頂部到底邊的路徑,使得路徑上所經過的數字之和最大。路徑上的每一步都只能往左下或右下走。只需要求出這個最大和即可,不必給出具體路徑。三角形的行數大於1小於

經典演算法題:數字三角形尋找最大路徑

題目:數字三角形,從頂部出發,在每一結點可以選擇向左走或得向右走,一直走到底層,要求找出一條路徑,該路徑上的數字和最大,輸出這個最大值。(1)樣例輸入:第一行是數塔層數N(1<=N<=100)。第二行起,從一個數字按數塔圖形依次遞增,共有N層。51311 812

演算法訓練 數字三角形

問題描述   (圖3.1-1)示出了一個數字三角形。 請編一個程式計算從頂至底的某處的一條路   徑,使該路徑所經過的數字的總和最大。   ●每一步可沿左斜線向下或右斜線向下走;   ●1<三角形行數≤100;   ●三角形中的數字為整數0,1,…99;   .   (圖

藍橋杯 演算法訓練 數字三角形

問題描述  (圖3.1-1)示出了一個數字三角形。 請編一個程式計算從頂至底的某處的一條路  徑,使該路徑所經過的數字的總和最大。  ●每一步可沿左斜線向下或右斜線向下走;  ●1<三角形行數≤100;

藍橋杯-動態規劃-java演算法訓練 數字三角形

問題描述   (圖3.1-1)示出了一個數字三角形。 請編一個程式計算從頂至底的某處的一條路   徑,使該路徑所經過的數字的總和最大。   ●每一步可沿左斜線向下或右斜線向下走;   ●1<三角形行數≤100;   ●三角形中的數字為整數0,1,…99;   .   (圖3

演算法訓練 數字三角形 (動態規劃)

演算法訓練 數字三角形  時間限制:1.0s   記憶體限制:256.0MB問題描述  (圖3.1-1)示出了一個數字三角形。 請編一個程式計算從頂至底的某處的一條路  徑,使該路徑所經過的數字的總和最

數字三角形問題 演算法入門經典

遞迴方法: #include <stdio.h> #define maxn 100 int buf[maxn][maxn]; int n; int d(int i, int j){ int t1, t2; return i == n ? buf[i][j

2016藍橋杯演算法訓練——數字三角形

數字三角形 問題描述   (圖3.1-1)示出了一個數字三角形。 請編一個程式計算從頂至底的某處的一條路   徑,使該路徑所經過的數字的總和最大。   ●每一步可沿左斜線向下或右斜線向下走;  

『嗨威說』演算法設計與分析 - PTA 數字三角形 / 最大子段和 / 編輯距離問題(第三章上機實踐報告)

本文索引目錄: 一、PTA實驗報告題1 : 數字三角形   1.1  實踐題目   1.2  問題描述   1.3  演算法描述   1.4  演算法時間及空間複雜度分析 二、PTA實驗報告題2 : 最大子段和   2.1  實踐題目   2.2  問題描述   2.

codevs 1220 數字三角形

esc 黃金 b- dia input panel pac strong tput 1220 數字三角形 時間限制: 1 s 空間限制: 128000 KB 題目等級 : 黃金 Gold

洛谷P1118 [USACO06FEB]數字三角形 搜索

col 但是 數字 turn pac ostream ios i++ nbsp 洛谷P1118 [USACO06FEB]數字三角形Backward Digit Su… 搜索 這題我們發現每一個位置的加權就是 楊輝三角 yh[ n ][ i ] 然後我們就可以求 n

數字三角形-poj

ber else return int poj 一個 style 思想 space 題目要求: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5   在上面的數字三角形中尋找在上面的數字三角形中尋找一條從頂部到底邊的路徑,使得路徑上所經過的數字之和最大。路徑上的每

P1118 [USACO06FEB]數字三角形Backward Digit Su…

nat game ext when 排列 輸入輸出格式 一個 位置 dbf P1118 [USACO06FEB]數字三角形Backward Digit Su… 題目描述 FJ and his cows enjoy playing a menta

數字三角形最小路徑和—動態規劃

div 路徑和 image 動態 節點 spa 直接 .cn 一行 思路:自底向上求解,從倒數第二行開始,本行節點到最後一行的最小路徑和等於該節點的數據加上下面左右兩個數據中最小的一個。不使用額外空間,直接將最小路徑和存儲到原有的數組中。1 int minimumTota

簡單的動態規劃,數字三角形,以及做題思路。

數值 space 鏈接 分析 ios style iostream 循環 turn 鏈接 一句話題目:給出一個n層的三角形,每個位置有一個數字,到達後可獲得,求到達最低層能達到的最大數字和。 題目分析: 首先我們考慮能不能用搜索做,因為對於一個坐標,我們只有向下

洛谷 P1216 [USACO1.5]數字三角形 Number Triangles

pre 一個 特定 輸入輸出 題目 最大的 窮舉法 數字金字塔 結束 題目描述 觀察下面的數字金字塔。 寫一個程序來查找從最高點到底部任意處結束的路徑,使路徑經過數字的和最大。每一步可以走到左下方的點也可以到達右下方的點。 7 3 8