小鑫去爬山
Problem Description
馬上就要放假了,小鑫打算去爬山。小鑫要去爬的這座山有n個海拔區(qū)間。為了清楚描述我們可以從上到下標號1到n。 第i個區(qū)間有i個落腳點,每一個落腳點都有一個危險值。 小鑫需要在第n個海拔區(qū)間挑選一個點向上爬,爬到第1個海拔區(qū)間(也就是山頂)。他必須規(guī)劃一條路徑,讓危險值之和最小。這樣才安全的。 并不是任意兩個落腳點之間都可以相互到達。我們這樣定義對于第i個(i<n)區(qū)間的第j個落腳點,只有第i+1個區(qū)間的第j個和第j+1個可以到達。 你能幫助他找到最安全的路么??
Input
輸入數(shù)據(jù)為多組,到文件結(jié)束。 對于每一組數(shù)據(jù),第一行有一個數(shù),為n 。n≤100; 接下來有n行,第i行有i個數(shù)。代表第i個區(qū)間i個落腳點的危險值。 所有數(shù)據(jù)均在int范圍內(nèi)。Output
對于每組數(shù)據(jù),輸出一行一個數(shù),為答案。Example Input
5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5Example Output
17
#include <stdio.h>
#include <stdlib.h>
int main()
{
? ? int a[101][101],d[101][101],i,j,n;
? ? while(~scanf("%d",&n))
? ? {
? ? ? ? for(i=1;i<=n;i++)
? ? ? ? ? ? for(j=1;j<=i;j++)
? ? ? ? ? ? scanf("%d",&d[i][j]);
? ? ? ? for(j=1;j<=n;j++)//從最后一行開始;
? ? ? ? ? ? a[n][j]=d[n][j];
? ? ? ? for(i=n-1;i>=1;i--)
? ? ? ? ? ? for(j=1;j<=i;j++)//尋找最小路徑;
? ? ? ? {
? ? ? ? ? ? if(a[i+1][j+1]<a[i+1][j]) a[i][j]=d[i][j]+a[i+1][j+1];
? ? ? ? ? ? else
? ? ? ? ? ? ? ? a[i][j]=d[i][j]+a[i+1][j];
? ? ? ? }
? ? ? ? printf("%d\n",a[1][1]);
? ? }
? ? return 0;
}
總結(jié)
- 上一篇: 数据结构实验之二叉树五:层序遍历
- 下一篇: 串的基本操作