题意:

n层楼,每层楼有m个房间。找出一个路径从第一层到达第M层,使得路径上的所有数的和是所有可达路径中最小的,每次上到下一层以后就不能再上去,依次输出路径上的各点在所在层的列数。

题解:

参考链接:传送门

dp[i][j]表示:在第i层楼,第j个房间所消耗的最小花费

dp[i][j]的最优值只能从dp[i-1][j]或者dp[i][j-1]或者dp[i][j+1]来得出,所以dp转移方程

 1 for(LL i=2; i<=n; ++i)
2 {
3 for(LL j=1; j<=m; ++j)
4 {
5 if(dp[i][j-1]<dp[i-1][j])
6 {
7 pre[i][j]='L'; //pre数组来记录路径
8 dp[i][j]=dp[i][j-1]+val[i][j]; //dp[i][j]最优由左边的dp[i][j-1]得出
9 }
10 else
11 {
12 pre[i][j]='D';
13 dp[i][j]=dp[i-1][j]+val[i][j]; //dp[i][j]最优由下面dp[i-1]【j】得出
14 }
15 }
16 for(LL j=m; j>=1; --j)
17 {
18 if(dp[i][j+1]+val[i][j]<dp[i][j])
19 {
20 pre[i][j]='R';
21 dp[i][j]=dp[i][j+1]+val[i][j];
22 }
23 }
24 }

AC代码:

  1 #include<stdio.h>
2 #include<string.h>
3 #include<iostream>
4 #include<algorithm>
5 #include<math.h>
6 #include<vector>
7 #include<queue>
8 #include<stack>
9 #include<map>
10 using namespace std;
11 typedef long long LL;
12 const int maxn=505;
13 const LL MAX=1e15;
14 const int INF=0x3f3f3f3f;
15 const double eps=1e-8;
16 const double PI=3.1415926;
17 const int mod = 1e9+7;
18 LL val[505][505],dp[505][505],v[505];
19 char pre[505][505];
20 LL n,m;
21 int main()
22 {
23 while(~scanf("%lld%lld",&n,&m))
24 {
25 for(LL i=1; i<=n; ++i)
26 {
27 for(LL j=1; j<=m; ++j)
28 scanf("%lld",&val[i][j]);
29 }
30 memset(dp,INF,sizeof(dp));
31 memset(pre,INF,sizeof(pre));
32 for(int i=1; i<=m; ++i)
33 dp[1][i]=val[1][i];
34 for(LL i=2; i<=n; ++i)
35 {
36 for(LL j=1; j<=m; ++j)
37 {
38 if(dp[i][j-1]<dp[i-1][j])
39 {
40 pre[i][j]='L';
41 dp[i][j]=dp[i][j-1]+val[i][j];
42 }
43 else
44 {
45 pre[i][j]='D';
46 dp[i][j]=dp[i-1][j]+val[i][j];
47 }
48 }
49 for(LL j=m; j>=1; --j)
50 {
51 if(dp[i][j+1]+val[i][j]<dp[i][j])
52 {
53 pre[i][j]='R';
54 dp[i][j]=dp[i][j+1]+val[i][j];
55 }
56 }
57 }
58 LL maxx=dp[n][1],pos=1,index=0;
59 for(LL i=2; i<=m; ++i)
60 {
61 if(maxx>dp[n][i])
62 {
63 //printf("**%lld\n",i);
64 maxx=dp[n][i];
65 pos=i;
66 }
67 }
68 v[index++]=pos;
69 //printf("%lld**\n",pos);
70 LL i=n,j=pos;
71 while(i!=1)
72 {
73 //printf("**\n");
74 if(pre[i][j]=='D')
75 {
76 pos=j;
77 i--;
78 v[index++]=pos;
79 }
80 else if(pre[i][j]=='R')
81 {
82 j++;
83 pos=j;
84 v[index++]=pos;
85 }
86 else if(pre[i][j]=='L')
87 {
88 j--;
89 pos=j;
90 v[index++]=pos;
91 }
92 }
93 for(i=index-1; i>=0; --i)
94 {
95 //if(i==0)
96 printf("%lld\n",v[i]);
97 //else printf("%lld ",v[i]);
98 }
99 }
100 return 0;
101 }

URAL - 1029 dp的更多相关文章

  1. DP+路径 URAL 1029 Ministry

    题目传送门 /* 题意:就是从上到下,找到最短路,输出路径 DP+路径:状态转移方程:dp[i][j] = min (dp[i-1][j], dp[i][j-1], dp[i][j+1]) + a[[ ...

  2. URAL 1029 Ministry

    URAL 1029 思路: dp+记录路径 状态:dp[i][j]表示到(i,j)这个位置为止的最少花费 初始状态:dp[1][i]=a[1][i](1<=i<=m) 状态转移:dp[i] ...

  3. Ural 1029 Ministry 题解

    目录 Ural 1029 Ministry 题解 题意 题解 程序 Ural 1029 Ministry 题解 题意 给定一个\(n\times m(1\le n \le10,1\le m \le50 ...

  4. URAL 1036(dp+高精度)

    Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Pract ...

  5. URAL 1029

    题目大意:M层N列的矩阵(各元素均为正整数),找出一个路径从第一层到达第M层,使得路径上的所有数的和是所有可达路径中最小的,每次上到下一层以后就不能再上去,依次输出路径上的各点在所在层的列数. KB  ...

  6. C - K-inversions URAL - 1523 (dp + 线段树)

    题目链接:https://cn.vjudge.net/contest/275079#problem/C 具体思路:我们可以分层的去建立,假设我们要找k层,我们可以先把满足1.2....k-1层的满足情 ...

  7. URAL DP第一发

    列表: URAL 1225 Flags URAL 1009 K-based Numbers URAL 1119 Metro URAL 1146 Maximum Sum URAL 1203 Scient ...

  8. Ural 1073 Square Country (DP)

    题目地址:Ural 1073 DP水题.也能够说是背包. #include <iostream> #include <cstdio> #include <string&g ...

  9. hdu 6006

    HDU - 6006 Engineer Assignment 我参考了这份题解. 贴上我比较拙的代码,留念一下. /** * 想到状态压缩的dp问题就解决了一半. */ #include <st ...

随机推荐

  1. spring cloud config —— git配置管理

    目录 talk is cheep, show your the code Server端 pom.xml server的application.yml 配置文件 测试Server client端 po ...

  2. 【计算机基础】常用的快捷键和DOS命令

    常用的快捷键和DOS命令 DOS命令 使用Linux比较酷 cool

  3. 【Linux】fio测试读写速度

    需要安装fio yum install fio -y 有很多依赖包     FIO用法: 随机读:(可直接用,向磁盘写一个2G文件,10线程,随机读1分钟,给出结果) fio -filename=/h ...

  4. 分布式系统:分布式任务调度xxl-job较深入使用

    目录 系统关键概念介绍 执行器 任务 任务配置项描述 阻塞策略 路由策略 日志问题 客户端日志 服务端日志 框架目前发现的缺点以及存在的问题 xxl-job是一个分布式定时任务调度框架,功能强大,底层 ...

  5. 深入解析vue响应式原理

    摘要:本文主要通过结合vue官方文档及源码,对vue响应式原理进行深入分析. 1.定义 作为vue最独特的特性,响应式可以说是vue的灵魂了,表面上看就是数据发生变化后,对应的界面会重新渲染,那么响应 ...

  6. VMware下安装Ubantu 18.04

    一.VIM安装及配置 1.安装VIM sudo apt-get install vim 二.拼音输入法以及搜狗拼音输入法安装 1.安装Fcitx输入框架 sudo apt-get install fc ...

  7. Spring集成GuavaCache实现本地缓存

    Spring集成GuavaCache实现本地缓存: 一.SimpleCacheManager集成GuavaCache 1 package com.bwdz.sp.comm.util.test; 2 3 ...

  8. 1V升5V芯片,1V升5V电路图规格书

    如果需要1V输入的话,可以看到PW5100的最低低压输入0.7V,就可以达到要求了. 同时PW5100也具有较大的输入开关电流1.5A,可以满足输出的要求和功能. 对于1V的供电来说,由于电压太低,我 ...

  9. SpringCloud Alibaba Nacos注册中心源码浅析

    一.前置了解 1.1 简介 Nacos是一款阿里巴巴推出的一款微服务发现.配置管理框架.我们本次对将对它的服务注册发现功能进行简单源码分析. 1.2 流程 Nacos的分析分为两部分,一部分是我们的客 ...

  10. 从JAVA内存到垃圾回收,带你深入理解JVM

    摘要:学过Java的程序员对JVM应该并不陌生,如果你没有听过,没关系今天我带你走进JVM的世界.程序员为什么要学习JVM呢,其实不懂JVM也可以照样写出优质的代码,但是不懂JVM有可能别被面试官虐得 ...