HLG 1813 小乐乐要下山 (dp)

链接: http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1813

Description

上学的路总是那么艰辛,在小乐乐辛苦的出了家门之后,她才想起自己的家已经搬到山上了(睡的真迷糊)。下山的路同样十分艰难,不同的地方通行的难易程度也不同。如图所示,小乐乐现在在山顶上,她面前有两条路,每条路通往一个地点,每个地点有一个值,表示这个通行的难易程度。最底层的地点就是山脚了。大家知道,小乐乐好懒好懒的,她想知道怎么下山最省力?

Input

第一行一个整数n(1<n<500)

随后n行,第i+1行有i个数字

表示山上的路况

Output

输出从山顶到山脚最省力的路。(保证答案唯一)

Sample Input

3

1

2 5

5 6 3

Sample Output

1 2 5

Hint

输入的是一个三角形,每个点能走到下面那个点和下右那个点。

代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <set>
#include <algorithm>
#define MAXN 505
#define RST(N)memset(N, 0, sizeof(N))
using namespace std;

int a[MAXN][MAXN], d[MAXN][MAXN], f[MAXN], n;

int min(int a, int b) { return a < b ? a : b; }

void Init()
{
    for(int i=1; i<=n; i++) {
        for(int j=1; j<=i; j++) {
            scanf("%d", &a[i][j]);
        }
    }
}

int main()
{
    while(~scanf("%d", &n)) {
        Init();
        for(int i=1; i<=n; i++) d[n][i] = a[n][i];
        for(int i=n-1; i>=1; i--) {
            for(int j=1; j<=i; j++) {
                d[i][j] = a[i][j] + min(d[i+1][j], d[i+1][j+1]);
            }
        }
        int x = 1;
        f[0] = a[1][1];
        int i = 2, j = 1;
        while(i <= n) {
            if(d[i][j] < d[i][j+1]){
                f[x++] = a[i][j];
                i++;
            }else {
                f[x++] = a[i][j+1];
                i++, j++;
            }
        }
        for(int xx=0; xx<x; xx++) {
            if(xx == 0) printf("%d", f[xx]);
            else printf(" %d", f[xx]);
        }
        puts("");
    }
    return 0;
}

HLG 1813 小乐乐要下山 (dp)

时间: 2024-08-08 10:30:15

HLG 1813 小乐乐要下山 (dp)的相关文章

小乐乐要下山(脑残动态规划记录路径)

哈尔滨理工大学OJ上的题目,水是很水,结果我做了好久,发现题中要循环输入,我也是醉了. 题目很简单但是心里不平衡决定发一下. Description 上学的路总是那么艰辛,在小乐乐辛苦的出了家门之后,她才想起自己的家已经搬到山上了(睡的真迷糊).下山的路同样十分艰难,不同的地方通行的难易程度也不同.如图所示,小乐乐现在在山顶上,她面前有两条路,每条路通往一个地点,每个地点有一个值,表示这个通行的难易程度.最底层的地点就是山脚了.大家知道,小乐乐好懒好懒的,她想知道怎么下山最省力? Input 第

HLG 1916 小Z的卡片 (set 难题)恏似系亚洲区噶题

链接: http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1916 Description: 小w和小z想到了一个新游戏,在这个游戏中他们各有N个卡片.小w想去使用她的卡片去覆盖小z的卡片. 卡片A能覆盖卡片B的条件是卡片A的高不小于卡片B的高同时卡片A的宽不小于卡片B的宽. 现在请计算出小w的牌最多能覆盖小z的牌的数量.注意牌只能被使用一次,并且牌不能被旋转. Input: 第一行是一个整数t

hdu2067 小兔的棋盘 DP/数学/卡特兰数

棋盘的一角走到另一角并且不越过对角线,卡特兰数,数据量小,可以当做dp求路径数 1 #include<stdio.h> 2 long long a[36][36]; 3 int main() 4 { 5 int n,count=0; 6 while (scanf("%d",&n)!=EOF&&n!=-1) 7 { 8 int i,j; 9 long long s; 10 count++; 11 for (i=1;i<=n;i++) a[0][i

HUST第八届程序设计竞赛-G小乐乐打游戏(双bfs)

题目描述 小乐乐觉得学习太简单了,剩下那么多的时间好无聊,于是便想打游戏.        最近新出了一个特别火的游戏,叫吃猪,小乐乐准备玩一玩.        吃猪游戏很简单,给定一个地图,大小为n*m,在地图中会随机出现一个火山口,只要小乐乐能逃离这个地图,他便能吃猪!         但吃鸡远没有那么简单:        1.小乐乐每走一次只能上下左右四个方向中走一步.        2.小乐乐每走一步,火山喷发的岩浆就会向四周蔓延一个格子,所有岩浆走过的地方都视为被岩浆覆盖.       

小乐乐打游戏

题目描述 小乐乐觉得学习太简单了,剩下那么多的时间好无聊,于是便想打游戏.         最近新出了一个特别火的游戏,叫吃猪,小乐乐准备玩一玩.         吃猪游戏很简单,给定一个地图,大小为n*m,在地图中会随机出现一个火山口,只要小乐乐能逃离这个地图,他便能吃猪!          但吃鸡远没有那么简单:         1.小乐乐每走一次只能上下左右四个方向中走一步.         2.小乐乐每走一步,火山喷发的岩浆就会向四周蔓延一个格子,所有岩浆走过的地方都视为被岩浆覆盖.  

小象和老鼠 DP

小象和老鼠 DP \(N*M\)的网格图,格子\((i,j)\)有\(A_{i,j}\)个老鼠,问小象从左上角\((1,1)\)走到右下角\((N,M)\)看到的最少老鼠.小象可以看见老鼠,当且仅当老鼠的位置\((x2,y2)\)满足\(|x1-x2|+|y1-y2|\le1\). 比较有意思的一道DP题,还是比较简单.我们发现如果直接设\(f[i][j]\)跑会导致一些格子重复计算,所以我们可以设\(f[i][j][0]\)表示到位置\((i,j)\)时最少看到的老鼠数量,并且当前状态是从上面

DP小乐乐化妆品

Hrbust1814 http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1814 1 #include<stdio.h> 2 #include<iostream> 3 #include<algorithm> 4 #include<string.h> 5 struct s 6 { 7 int c,val; 8 }p[105]; 9 using nam

【上海交大oj】邮递员小F(状态压缩dp)(旅行商问题)

1088. 邮递员小F Description 因为制造类专业很难在大城市立足,曾经立志振兴中华之工业的小F,果断在本科毕业后转行做了一名光荣的邮递员. 他的任务是每天从总局出发,行走于所管辖区域的若干的邮局,收集所有的信,然后再汇总返回总局. 因为工作繁忙,同一个邮局他每天只希望去一次. 来往于任意两个邮局是有一定代价的.而且为了方便统计,假定来回两条道路上的代价假设是一样的. 现在小F希望你能给出他每天的最优行走方案,使得总的代价最少. Input Format 输入数据包括两部分. 第一行

洛谷 p1164 小A点菜 【dp(好题)】 || 【DFS】

题目链接:https://www.luogu.org/problemnew/show/P1164 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:"随便点". 题目描述 不过uim由于买了一些辅(e)辅(ro)书,口袋里只剩M元(M<=10000). 餐馆虽低端,但是菜品种类不少,有N种(N<=100),第i种卖ai元(ai<=1000).由于是很低端的餐馆,所以每种菜