日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Vijos 1006

發布時間:2024/8/1 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Vijos 1006 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

有一個數字三角形,共nn行,依次編號為第一行,第二行至第nn行。其中第ii行有ii個數字,位置依次記為(i,1),(i,2)(i,1),(i,2)(i,i)(i,i)
現在從第nn層的第一個位置出發(即(n,1)(n,1)),每一步移到相鄰的,且行編號小于或等于當前行編號的一個位置中,直到(1,1)(1,1)結束,在不重復經過任何位置的情形下,路過的所有位置(包括端點)的對應數字之和最小。

下面詳細定義相鄰關系。
同一層內連續的兩個位置相鄰,特別的有每一層第一個位置與最后一個位置相鄰。
對于位置(i,j)(i,j),它與(i-1,j-1)(i?1,j?1)以及(i-1,j)(i?1,j)相鄰,特別的(i,1)(i,1)(i-1,i-1)(i?1,i?1)相鄰,且(i,i)(i,i)(i-1,1)(i?1,1)相鄰。

格式

輸入格式

第一行有一個數n(2<=n<=1000),表示山的高度。

從第二行至第n+1行,第i+1行有i個數,每個數表示晴天小豬在這一段山路上需要爬的時間。

輸出格式

一個數,即晴天小豬所需要的最短時間。

樣例1

樣例輸入1

5 1 2 3 4 5 6 10 1 7 8 1 1 4 5 6 Copy

樣例輸出1

10 Copy

限制

各個測試點1s

提示

在山的兩側的走法略有特殊,請自己模擬一下,開始我自己都弄錯了……


思路:

輸入的是一個n行,第i行有i個數的數字三角形。個人比較喜歡舉個具體的例子進行分析。如下:

1

2? ? 3

4? ?5? ?6

7? ?8? ?9? ?10

11? ?12? ?13? ?14? ?15

為一個5行的數字三角形。

其可能行走的路線是,向左,向右,斜向上,斜向下,而特殊點(即邊界點)對應的斜上方可以到上一行的另一邊。

例如:5可以到4,6,2,3;11可以到12,15,7,10;

一般化則為a[i][j]可以向a[i][j-1],a[i][j+1],a[i-1][j-1],a[i-1][j]位置走。

臨界處:a[i][1]可以向a[i][2],a[i][i],a[i-1][1],a[i-1][i-1]位置走;a[i][i]同理。

我們從上往下推,如果走到a[i][j]此時是最短的,那么之前的路程都是最短的。

所以我們可以以頂點為起點,計算到達底部各點的最短距離。

#include <iostream>using namespace std;int main() {int num;cin>>num;int ang[num+1][num+1];int f[num+1][num+1];for(int i=1;i<=num;i++)for(int j=1;j<=i;j++)cin>>ang[i][j];f[1][1]=ang[1][1]; //以此為起點for(int i=2;i<=num;i++){for(int j=2;j<i;j++)f[i][j]=min(f[i-1][j-1],f[i-1][j])+ang[i][j]; //計算上一層到這一層的最短距離f[i][1]=min(f[i-1][i-1],f[i-1][1])+ang[i][1]; f[i][i]=min(f[i-1][i-1],f[i-1][1])+ang[i][i]; //剔除特別點for(int j=2;j<=i;j++)f[i][j]=min(f[i][j],f[i][j-1]+ang[i][j]); //從左到右計算同一層最短距離f[i][1]=min(f[i][1],f[i][i]+ang[i][1]);for(int j=i-1;j>=1;j--)f[i][j]=min(f[i][j],f[i][j+1]+ang[i][j]);f[i][i]=min(f[i][i],f[i][1]+ang[i][i]); //從右到左計算同一層最短距離}cout<<f[num][1];return 0; }

總結

以上是生活随笔為你收集整理的Vijos 1006的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。