背景

    在很久很久以前,有一个动物村庄,那里是猪的乐园(^_^),村民们勤劳、勇敢、善良、团结……
    不过有一天,最小的小小猪生病了,而这种病是极其罕见的,因此大家都没有储存这种药物。所以晴天小猪自告奋勇,要去采取这种药草。于是,晴天小猪的传奇故事便由此展开……

描述

    这一天,他来到了一座深山的山脚下,因为只有这座深山中的一位隐者才知道这种药草的所在。但是上山的路错综复杂,由于小小猪的病情,晴天小猪想找一条需时最少的路到达山顶,但现在它一头雾水,所以向你求助。
    山用一个三角形表示,从山顶依次向下有1段、2段、3段等山路,每一段用一个数字T(1<=T<=100)表示,代表晴天小猪在这一段山路上需要爬的时间,每一次它都可以朝左、右、左上、右上四个方向走(**注意**:在任意一层的第一段也可以走到本层的最后一段或上一层的最后一段,且在任意一层的最后一段也可以走到本层的第一段或上一层的第一段)。
    晴天小猪从山的左下角出发,目的地为山顶,即隐者的小屋。

输入格式

    第一行有一个数n(2<=n<=1000),表示山的高度。
    从第二行至第n+1行,第i+1行有i个数,每个数表示晴天小猪在这一段山路上需要爬的时间。

输出格式

    一个数,即晴天小猪所需要的最短时间。

测试样例1

输入



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

输出

10

备注

在山的两侧的走法略有特殊,请自己模拟一下,开始我自己都弄错了……Sunnypig
/*
每一次它都可以朝左、右、左上、右上四个方向走 !!!!!!!!!!!!!!!! 每一次它都可以朝左、右、左上、上四个方向走 不是右上是上!!!!!!!!!!!!!!!!
*/ #include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = ;
int n,h[][],dp[][];
int main(){
cin>>n;
for(int i = ;i <= n;i++){
for(int j = ;j <= i;j++){
scanf("%d",&h[i][j]);
}
}
for(int i = ;i <= n + ;i++){
for(int j = ;j <= ;j++){
dp[i][j] = maxn;
}
}
dp[n][] = ;
for(int i = n;i >= ;i--){
for(int j = ;j <= i;j++){
if(j == ) dp[i][j] = min(min(dp[i][j],dp[i+][j] + h[i+][j]),min(dp[i+][i+] + h[i+][i+],dp[i+][j+] + h[i+][j+]));
else if(j == i) dp[i][j] = min(dp[i][j],min(dp[i+][] + h[i+][],min(dp[i+][j+] + h[i+][j+],dp[i+][j] + h[i+][j])));
else dp[i][j] = min(dp[i][j],min(dp[i+][j+] + h[i+][j+],dp[i+][j] + h[i+][j]));
}
dp[i][] = min(dp[i][],dp[i][i] + h[i][i]);
for(int j = ;j <= i;j++) dp[i][j] = min(dp[i][j],dp[i][j-] + h[i][j-]);
dp[i][n] = min(dp[i][n],dp[i][] + h[i][]);
for(int j = n - ;j >= ;j--) dp[i][j] = min(dp[i][j],dp[i][j+] + h[i][j+]);
}
cout<<dp[][] + h[][];
return ;
}

tyvj1106 登山的更多相关文章

  1. 登山(Climb)

    题目: Rocky山脉有n个山峰,一字排开,从西向东依次编号为1, 2, 3, --, n.每个山峰的高度都是不一样的.编号为i的山峰高度为hi.  小修从西往东登山.每到一座山峰,她就回头观望自己走 ...

  2. [DP题]登山

    描述 五一到了,PKU-ACM队组织大家去登山观光,队员们发现山上一个有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号.同时队员们还有另一个登山习惯,就是 ...

  3. 【Foreign】登山 [DP][数学]

    登山 Time Limit: 10 Sec  Memory Limit: 256 MB Description 恶梦是一个登山爱好者,今天他来到了黄山 俗话说的好,不走回头路.所以在黄山,你只能往前走 ...

  4. 【NHOI2018】跳伞登山赛

    [题目描述] 某山区有高高低低的 n 个山峰,根据海拔高度的不同,这些山峰由低到高进行了 1 到 n 编号.有 m 条只能单向通行的羊肠小道连接这些山峰.现在,这里要举行一场跳伞登山赛,选手们伞降到某 ...

  5. noi 1996 登山

    题目链接: http://noi.openjudge.cn/ch0206/1996/ LIS,LDS 正着做最长递增子序列,反着做最长递减子序列. http://paste.ubuntu.com/23 ...

  6. HDU 5360 Hiking 登山 (优先队列,排序)

    题意: 有n个人可供邀请去hiking,但是他们很有个性,每个人都有个预期的人数上下限[Li,Ri],只有当前确定会去的人数在这个区间内他才肯去.一旦他答应了,无论人数怎样变更,他都不会反悔.问最多能 ...

  7. java线程例子登山

    Through its implementation, this project will familiarize you with the creation and execution of thr ...

  8. openjudge-NOI 2.6-1996 登山

    题目链接:http://noi.openjudge.cn/ch0206/1996/ 题解: 正反求两次LIS即可 #include<cstdio> #include<cstring& ...

  9. AcWing登山

    这是2006北大举办的ACM的一道题. 题意为:给定景点海拔高度,队员们不去游览相同高度的景点,一开始往上爬,一但往下爬就不能再向上爬,求最多可以游览多少个景点.那么我们可以得到一个结论:以一个最高点 ...

随机推荐

  1. CentOS RedHat YUM 源扩展补充(32位、64位均有)

    一般情况下强烈建议在CentOS6下面使用YUM配置安装LAMP环境,一些兄弟也很喜欢使用编译的安装方法,个人觉得如果不是对服务器做定制,用yum安装稳定简单,何必去download&make ...

  2. [转]ASP.NET Core 之 Identity 入门(一)

    本文转自:http://www.cnblogs.com/savorboard/p/aspnetcore-identity.html 前言 在 ASP.NET Core 中,仍然沿用了 ASP.NET里 ...

  3. Leetcode: plus one

    June 22, 2015 Given a number represented as an array of digits, plus one to the number. Leetcode: pl ...

  4. BZOJ 2034 【2009国家集训队】 最大收益

    Description 给出\(N\)件单位时间任务,对于第\(i\)件任务,如果要完成该任务,需要占用\([S_i, T_i]\)间的某个时刻,且完成后会有\(V_i\)的收益.求最大收益. 澄清: ...

  5. Moosefs源代码分析

    一.分析MFS非常有用的资源 本来想写的,但是看到了CSDN上的资料就没这个心情了,非常详细的讲解分享给大家: CSDN中非常详细的文档:http://download.csdn.net/detail ...

  6. 最好用的JQuery插件集合以及组合拳

    [Tab页签] Jquery-tab [Table] mmGrid

  7. K-means聚类算法

    聚类分析(英语:Cluster analysis,亦称为群集分析) K-means也是聚类算法中最简单的一种了,但是里面包含的思想却是不一般.最早我使用并实现这个算法是在学习韩爷爷那本数据挖掘的书中, ...

  8. java用selenium库控制chrome

    一.简介 selenium是浏览器自动化工具,可以通过程序来控制浏览器行为,这就是selenium!你可以用它做任何你想做的事情.很多时候人们用它测试web应用,但selenium的用途绝不仅限于此. ...

  9. js base64加密,后台解密

    这是为了解决页面发送post请求,传输密码,在页面的控制台可以看到密码的明文,所以先用base64把要传输的密码转换为非明文,然后在后台解密处理. base64encode.js // base64加 ...

  10. 计算机中位(bit), 字节(byte), 字(word)的关系

    1.位(bit) 来自英文bit,音译为“比特”,表示二进制位.位是计算机内部数据储存的最小单位,11010100是一个8位二进制数.一个二进制位只可以表示0和1两种状态(21):两个二进制位可以表示 ...