1. 程式人生 > >YTU OJ 3298: 小鑫要爬山

YTU OJ 3298: 小鑫要爬山

3298: 小鑫要爬山

題目描述

馬上就要放假了,小鑫打算去爬山。  小鑫要去爬的這座山有n個海拔區間。為了清楚描述我們可以從上到下標號1到n。 第i個區間有i個落腳點,每一個落腳點都有一個危險值。 小鑫需要在第n個海拔區間挑選一個點向上爬,爬到第1個海拔區間(也就是山頂)。他必須規劃一條路徑,讓危險值之和最小。這樣才安全的。 並不是任意兩個落腳點之間都可以相互到達。我們這樣定義對於第i個(i<n)區間的第j個落腳點,只有第i+1個區間的第j個和第j+1個可以到達。 你能幫助他找到最安全的路麼?

輸入

輸入資料為多組,到檔案結束。 對於每一組資料,第一行有一個數,為n 。n≤100; 接下來有n行,第i行有i個數。代表第i個區間i個落腳點的危險值。 所有資料均在int範圍內。

輸出

對於每組資料,輸出一行一個數,為答案。

樣例輸入

5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

樣例輸出

17
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[99][99]={0};
int main()
{
    int n,m,i,j,k;
    int a[99][99]={0};

    while(cin>>n)
    {
        int s=0;
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=i;j++)
            {
                cin>>a[i][j];
            }
        }
        for(i=n-1;i>0;i--)
        {
            for(j=1;j<=i;j++)
            {
                a[i][j]+=min(a[i+1][j],a[i+1][j+1]);
            }
        }
        cout<<a[1][1]<<endl;
    }
    return 0;
}