1. 程式人生 > >演算法訓練 數字三角形

演算法訓練 數字三角形

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


  .
  (圖3.1-1) 輸入格式   檔案中首先讀到的是三角形的行數。

  接下來描述整個三角形 輸出格式   最大總和(整數) 樣例輸入 5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5 樣例輸出 30 這一道題首先很容易想到的是遞迴,遍歷所有的路徑,然後找出最大值,但是,可惜的是超時。 我們需要的是從倒數第二行倒著看,你會發現一個規律。 我們以一個串序號為例 1 2 3 4 5 6 7 8 9 10 先看倒數第二行 4 = max(7,8) + 4 5 = max(8,9) + 5 6 = max(9,10) + 6 接著向上一行 2 = max(4,5) + 2 3 = max(5,6) + 3 接著向上一行 1 = max(2,3) + 1 規律很明顯就找出來了 原始碼: #include <iostream>
#include <algorithm>
using namespace std;
#define max_m 104
using namespace std;
int num[max_m][max_m], n;
int main()
{
 int i, j;
 cin >> n;
 for (i = 1; i <= n; i++)
  for (j = 1; j <= i; j++)
  {
   cin >> num[i][j];
  }
 for (i = n - 1; i >= 1; i--)
  for (j = 1; j <= i; j++)
  {
   num[i][j] = num[i][j] + max(num[i+1][j],num[i+1][j+1]);
  }
 cout << num[1][1] << endl;
}

相關推薦

演算法訓練 數字三角形

問題描述   (圖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)示出了一個數字三角形。 請編一個程式計算從頂至底的某處的一條路  徑,使該路徑所經過的數字的總和最

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

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

演算法訓練--數字盒子

/*題目:對於一個盒子S,要求進行插入以及刪除操作,輸出是否操作成功 數字的範圍:10^5(60%)~10^18 */#include <bits/stdc++.h>using namespace std;//Mod:雜湊函式的模數//table:雜湊表 const int Mod = 10000

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

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

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

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

ALGO-68 演算法訓練 判定數字 (c++)

演算法訓練 判定數字   時間限制:1.0s   記憶體限制:512.0MB        編寫函式,判斷某個給定字元是否為數字。 樣例輸入 9 樣例輸出 yes #include <iostrea

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

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

演算法 數字三角形問題

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

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

遞迴方法: #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

『嗨威說』演算法設計與分析 - 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