回档|晴天小猪历险记之hill

背景 Background

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

描述 Description

这一天,他来到了一座深山的山脚下,因为只有这座深山中的一位隐者才知道这种药草的所在。但是上山的路错综复杂,由于小小猪的病情,晴天小猪想找一条需时最少的路到达山顶,但现在它一头雾水,所以向你求助。

  山用一个三角形表示,从山顶依次向下有1段、2段、3段等山路,每一段用一个数字T(1<=T<=100)表示,代表晴天小猪在这一段山
路上需要爬的时间,每一次它都可以朝左、右、左上、右上四个方向走(**注意**:在任意一层的第一段也可以走到本层的最后一段或上一层的最后一段)。

  晴天小猪从山的左下角出发,目的地为山顶,即隐者的小屋。

输入格式 Input Format

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

输出格式 Output Format

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

样例输入 Sample Input

5

1

2 3

4 5 6

10 1 7 8

1 1 4 5 6

样例输出 Sample Output

10

题目分析:

这道题坑在竟然有环,还坑在我竟然没看到。于是悲剧了。但这题其实不是很难,就是在山的两侧很难走。需要特判。

源代码:

#include<iostream>
#include<cstdio>
#define maxint 2000000000
#define min(a,b)
int a[1000][1000]={0};
int d[1000][1000]={0};

inline int scan()
{
       char ch=getchar();
       int data=0;
       while (ch<‘0‘ || ch>‘9‘) ch=getchar();
       do data=data*10+ch-‘0‘;
       while ( (ch=getchar())>=‘0‘ && ch<=‘9‘);
       return data;
}

int main()
{
    int n,i,j,k,tmp,x1,x2;
    n=scan();
    for (i=0; i
      for (j=0; j<=i; j++)
        a[i][j]=scan();
    for (i=0; i
      for (j=0; j<=i; j++)
        d[i][j]=maxint;
    for (i=0; i
    for (i=1; i
    for (i=n-1; i>=0; i--) d[n-1][i]=min(d[n-1][i],d[n-1][(i+1)%n]+a[n-1][i]);
    //从右边走过来,%是为了破环  

    for (i=n-2; i>=0; i--)
    {
       d[i][0]=min(d[i+1][0],d[i+1][1]); //下面还是右下
       d[i][0]=min(d[i][0],d[i+1][i+1]); //从左下走过来
       d[i][0]+=a[i][0];
       d[i][i]=min(d[i+1][0],d[i+1][i]);  //右下和下
       d[i][i]=min(d[i][i],d[i+1][i+1]);  //右下
       d[i][i]+=a[i][i];
       //上述全都是特殊情况
       for (j=1; j<=i-1; j++) d[i][j]=min(d[i+1][j],d[i+1][j+1])+a[i][j]; //下,右下
       d[i][0]=min(d[i][0],d[i][i]+a[i][0]); //左下
       for (j=1; j<=i; j++) d[i][j]=min(d[i][j],d[i][j-1]+a[i][j]); //左
       for (j=i; j>=0; j--) d[i][j]=min(d[i][j],d[i][(j+1)%(i+1)]+a[i][j]);//右
    }
    printf("%d\n",d[0][0]);
    //system("pause");
    return 0;
}
时间: 2024-08-09 02:07:56

回档|晴天小猪历险记之hill的相关文章

[DP][vijos1006]晴天小猪历险记之Hill

题目梗概 首先题目和数字三角形那道经典的DP题目描述一样,不过增加了两处不同: 1.同行之间可以相邻移动 2.位置(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)相邻. 思考 首先第一点我们只要在数字三角形的基础上,加上每行的移动就可以了. 但是第二点就要注意了,这样的描述使DP变成了环形. 具体的解释看这位大佬(Powde

vijosP1006 晴天小猪历险记之Hill

链接:https://vijos.org/p/1006 [思路] 图上DP. 这个题的递推顺序是关键.先从上一行得到最小值,然后从本行比较最小值,注意本行.本行与上一行之间的第一段与最后一段是相通的. [代码] 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #define FOR(a,b,c) for(int a=(b);a<=(c);a++) 5 using namespace std

VIjos 晴天小猪历险记之Number (搜索+链表hash)

背景 话说上一回,晴天小猪不畏千难万险.千辛万苦.千磨万难……终于爬上了那座深山,来到了那位隐者的小屋中,但它不知道,有一个问题正等待着它……晴天小猪一推开门,就发现那里……空无一人?但在屋中央有一个石桌,上面有一些字(强吧),最大的几个:如要见我,先过了这道关再说!晴天小猪定睛一看,终于发现桌上密密麻麻布满了字,费了九天二猪之力,终于将题目看完,大意是:为了维护世界的和平……我们需要让九位勇士组成一个3*3的阵型去屠龙,但是这个阵型的要求很奇特,要九个人按照强弱依次编号1~9,且阵型中每行.每

数字三角形合集

简单介绍 数字三角形这东西,出现了有一定的年头了.于是,出现了一些变种-- 眼下已知的题目 Codevs1220 数字三角形 这题是原版IOI1994啊-- f[i][j]=a[i][j]+max(f[i-1][j],f[i-1][j-1]). Codevs2193 数字三角形ww 和 Codevs2198 数字三角形www 改了.必须得经过一个点.而且2198是2193的数据规模上的加强版. 然而这并没有什么L用,仅仅需让必须经过的点的权值加上一个特别大的值,最后的结果再减去这个值即可了. 实

[SinGuLaRiTy] 动态规划题目复习

[SinGuLaRiTy-1026] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. [UVA 1025] A Spy in the Metro 题目描述 特工玛利亚被送到S市执行一个特别危险的任务.她需要利用地铁完成他的任务,S市的地铁只有一条线路运行,所以并不复杂. 玛利亚有一个任务,现在的时间为0,她要从第一个站出发,并在最后一站的间谍碰头.玛利亚知道有一个强大的组织正在追踪她,她知道如果一直呆在一个车站,她会有很大的被抓的风险,躲

PDMS-DB之配置、回档、合并

DB,即database的简写,是PDMS中数据存储的载体.PDMS中各种各样的三维模型.平面图纸.数据库等等,几乎都存储在DB中.因此一旦DB发生异常,其后果将是毁灭性的,为此我们需要有一些技术手段来处理DB的问题. 1.Reconfigure 重新配置数据库 在使用PDMS的时候,由于网络的异常.操作的异常,也可能是程序本身的异常,使得PDMS非正常关闭.这些情况会导致有影子用户残留在项目中,或者有未正常解除的声明,最极端的会使得某些元素被锁定甚至损坏,使得该DB中数据出现异常. 一般来说,

codeforces Hill Number 数位dp

http://www.codeforces.com/gym/100827/attachments Hill Number Time Limits:  5000 MS   Memory Limits:  200000 KB 64-bit interger IO format:  %lld   Java class name:  Main Description A Hill Number is a number whose digits possibly rise and then possibl

4 多表代替密码之Hill 密码_1 矩阵工具类

在说明Hill加密之前要先复习线性代数的知识,主要是关于矩阵的一些运算和概念. 一.矩阵的逆: 定义方阵M的逆矩阵应该满足M*M^-1==I,其中I是单位矩阵,比如: 但是这个地方是对英文字母进行加密,所以矩阵中的数字都是模26的值,比如:   *  = 这个地方结果就应该mod26, 最后结果就是: 那么上面两个相乘的矩阵就互为逆矩阵. 这个地方要多说一下密码学中的mod运算,数学中-5%26结果肯定是-5,但是这个地方我们取值只能在0-25之间,所以-5%26的结果应该是21. 求解一个方阵

javascript实现playfair和hill密码算法

时至期末,补习信息安全概论作业.恰巧遇古典密码学算法中的playfair算法和hill算法,用javascript语言实现起来是在有趣,边查百度边编码,顺便好好补习一下javascript基础. playfair Playfair密码(英文:Playfair cipher 或 Playfair square)是一种替换密码.依据一个5*5的正方形组成的密码表来编写,表中排列有25个字母.对于英语中的26个字母,去掉最常用的Z,构成密码表. 实现思路: 1,编制密码表 密钥是一个单词或词组,密码表