题意:

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. web网上书店总结(jsp+servlet)

    web网上书店总结 前端的首页.效果如下: 基本上按照页面有的内容对其实现功能.按照用户划分功能模块,有后台管理员和普通用户,登录的时候会判断账户的类别,例如0权限代表普通用户登录,1权限代表管理员登 ...

  2. Python运维自动化psutil 模块详解(超级详细)

    psutil 模块 参考官方文档:https://pypi.org/project/psutil/ 一.psutil简介 psutil是一个开源且跨平台(http://code.google.com/ ...

  3. (十一)time模块

    三种时间表示 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行"ty ...

  4. binlog-do-db

    如果只是对一个数据库设置,其实没有效果的,其他数据还是会记录binlog的 binlog-ignore-db =database b  binlog日志里面将不会记录database b的所有相关的操 ...

  5. 二十五:XSS跨站值原理分类及攻击手法

    HTML DOM树 XSS跨站产生原理,危害,特点 本质,产生层面,函数类,漏洞操作对应层,危害影响,浏览器内核版本 XSS是什么? XSS全称跨站脚本(Cross Site Scripting),为 ...

  6. 2V转3V的电源芯片电路图,2.4V转3V电路

    两节镍氢电池1.2V+1.2V是2.4V的标称电压,2.4V可以转3V输出电路应用. 在2.4V转3V和2V转3V的应用中,输出电流可最大600MA. 2V的低压输入,可以采用PW5100低压输入专用 ...

  7. Python 身份证校验代码

    Python 身份证校验代码 居民身份证bai编号识别 1.身份证编码规则如下:根据[中华人民共和国国家标准GB11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本 ...

  8. centos&linux

    who am i 查看是哪一个用户 init 0关机 ifconfig用于配置网络或显示当前网络接口的状态 eth0是网卡的名字 第一行:flags后面的up指的是网卡处于运行状态,running连接 ...

  9. jQuery 当前展开其他收缩 三级下拉菜单(转载)

    jQuery可展开收缩三级下拉菜单 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...

  10. 干货 | 高耦合场景下,Trip.com如何做支付设计与落地

    干货 | 高耦合场景下,Trip.com如何做支付设计与落地 https://mp.weixin.qq.com/s/VR9NTR3RpKVfmUPcwgMABg 原创 Ryann Liu 携程技术 2 ...