算法設計實驗——數字三角形問題


問題描述:

  給定一個有n行數字組成的數字三角形,如下圖所示:

         7

       3  8

      8      1       0

      2      7  4  4

      4  5  2  6  5

  設計一個算法,計算出從三角形的頂端至底的一條路徑,是該路徑經過的數字總和最大。

  樣例最大值為:30 = 7 + 3 +8 +7 + 5;

代碼:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>

using namespace std;
int a[105][105],mp[105][105];
void init()
{
    memset(a,0,sizeof(a));
    memset(mp,0,sizeof(mp));
}
int find(int n)
{
    for(int i=n-1;i>=1;i--)
    {
        for(int j=1;j<=i;j++)
        {
            mp[i][j]+=max(mp[i+1][j],mp[i+1][j+1]);
        }
    }
    return mp[1][1];
}
int main()
{
    int n;
    while(1)
    {
        printf("請輸入路徑層數(輸入“0”結束,上限100):");
        scanf("%d",&n);
        if(!n){printf("See You Again!\n");break;}
        else if(n>100){printf("數據超限!請重新輸入!\n");continue;}
        init();
        for(int i=1;i<=n;i++)
            for(int j=1;j<=i;j++)
            {
                scanf("%d",&a[i][j]);
                mp[i][j]=a[i][j];
            }
        int ans=find(n);
        printf("%d\n",ans);
    }
    return 0;
}
/*
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
*/

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM