晴天小豬歷險記之Hill
時間限制 1000 ms
記憶體限制 128 MB
題目描述
這一天,他來到了一座深山的山腳下,因為只有這座深山中的一位隱者才知道這種藥草的所在。但是上山的路錯綜複雜,由於小小豬的病情,晴天小豬想找一條需時最少的路到達山頂,但現在它一頭霧水,所以向你求助。
山用一個三角形表示,從山頂依次向下有1段、2段、3段等山路,每一段用一個數字T(1< =T< =100)表示,代表晴天小豬在這一段山路上需要爬的時間,每一次它都可以朝左、右、左上、右上四個方向走(注意:在任意一層的第一段也可以走到本層的最後一段或上一層的最後一段)。
晴天小豬從山的左下角出發,目的地為山頂,即隱者的小屋。
輸入資料
第一行有一個數 n (2≤n≤1000),n (2≤n≤1000), 表示山的高度。
從第二行至第 n+1n+1 行,第 i+1i+1 行有 ii 個數,每個數表示晴天小豬在這一段山路上需要爬的時間。
輸出資料
一個數,即晴天小豬所需要的最短時間。
樣例輸入
5
1
2 3
4 5 6
10 1 7 8
1 1 4 5 6
樣例說明
10
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <algorithm>
#include <string>
#include <iostream>
#define INF 0x3f3f3f3f
using namespace std;
int a[1002][1002] = { 0 };
int dp[1002][1002] = { 0 };
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
scanf("%d", &a[i][j]);
//cin >> a[i][j];
}
}
dp[1][1] = a[1][1];
for (int i = 2; i <= n; i++) {
for (int j = 1; j <= i; j++) {
if (j == 1 || j == i) {
int ans1 = dp[i - 1][1] + a[i][j];
int ans2 = dp[i - 1][i - 1] + a[i][j];
dp[i][j] = min(ans1, ans2);
}
else {
int ans1 = dp[i - 1][j - 1] + a[i][j];
int ans2 = dp[i - 1][j] + a[i][j];
dp[i][j] = min(ans1, ans2);
}
}
//for (int k = 1; k <= i; k++) {
// cout << dp[i][k] << " ";
//}
//cout << endl;
//cout << "---------------------------" << endl;
int t = i;
while(t--)
for (int k = 1; k <= i; k++) {
int r = k + 1;
int l = k - 1;
if (r > i) r = 1;
if (l < 1) l = i;
int ans1 = dp[i][r] + a[i][k];
int ans2 = dp[i][l] + a[i][k];
for (int num = 1; num < i; num++) {
if (r > i) r = 1;
if (ans1 < dp[i][k]) dp[i][k] = ans1;
else break;
ans1 += a[i][r++];
}
for (int num = 1; num < i; num++) {
if (l < 1) l = i;
if (ans2 < dp[i][k]) dp[i][k] = ans2;
else break;
ans2 += a[i][l--];
}
}
//for (int k = 1; k <= i; k++) {
// cout << "a[" << a[i][k] << "]" << "dp[" << dp[i][k] << "] ";
//}
//for (int k = 1; k <= i; k++) {
// cout << dp[i][k] << " ";
//}
//cout << endl;
//cout << "---------------------------" << endl;
}
cout << dp[n][1] << endl;
return 0;
}
相關文章
- Http歷險記(上)HTTP
- 開車歷險記
- js避坑歷險記JS
- Http歷險記(下)-- Struts的秘密HTTP
- 升級MySQL8.0的歷險記MySql
- Elasticsearch 6.* 升級 7.* 歷險記Elasticsearch
- 新晴天氣推出“中暑風險”提醒,防範高溫中暑病
- Hill密碼(Java)密碼Java
- 一個iOS開發者的Flutter“歷險記”iOSFlutter
- python 歷險記(四)— python 中常用的 json 操作PythonJSON
- JVM垃圾回收歷險JVM
- Linux檢視歷史記錄小技巧Linux
- Dockerfile 小記之FROMDocker
- 記:css繪製小豬佩奇的專案及踩過的坑CSS
- 《艾瑪和泰迪熊:影子歷險記》:把光影玩出花兒來
- 希爾密碼(hill密碼)密碼
- Sqlite學習筆記之Sqlite歷史SQLite筆記
- 小程式專案之填坑小記
- 小豬的Python學習之旅 —— 7.Python併發之threading模組(1)Pythonthread
- 幫豬豬修修改的程式碼2016年的程式碼記錄
- 《地心深處》:擁有黃金體驗的挖礦歷險記
- 新榮耀歷險記:帶著“神裝”踏上英雄試煉路
- 《Redis深度歷險:核心原理和應用實踐》讀書筆記Redis筆記
- 從零開始構建一個vue專案 --- webpack歷險記VueWeb
- 分散式Redis深度歷險-Cluster分散式Redis
- 分散式Redis深度歷險-Clustor分散式Redis
- 分散式Redis深度歷險-Sentinel分散式Redis
- 紙藝歷險Papetura Mac - 點選冒險遊戲Mac遊戲
- Git 學習記錄之演變歷史Git
- Dockerfile小記之ARG和ENVDocker
- CSS 小結筆記之emCSS筆記
- CSS 小結筆記之定位CSS筆記
- CSS 小結筆記之背景CSS筆記
- CSS 小結筆記之BFCCSS筆記
- 菜鳥專科生從參加IT培訓到就業歷險記就業
- 分散式Redis深度歷險-複製分散式Redis
- 豬行天下之Python基礎——3.3 字典Python
- 豬行天下之Python基礎——3.4 集合Python