题意:

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. explain extended;show warnings

    mysql> explain extended select count(*) from xuehao;+----+-------------+-------+------+---------- ...

  2. CTFshow萌新赛-web签到

    打开靶机 查看页面信息 可以看到有一个system函数 在Linux中可以使用":"隔离不同的语句 payload如下 https://5105c8b6-83aa-4993-91b ...

  3. 详解MySQL执行事务的语法和流程

    摘要:MySQL 提供了多种存储引擎来支持事务. MySQL 提供了多种存储引擎来支持事务.支持事务的存储引擎有 InnoDB 和 BDB,其中,InnoDB 存储引擎事务主要通过 UNDO 日志和 ...

  4. 二十七:XSS跨站之代码及httponly绕过

    httponly:如果给某个 cookie 设置了 httpOnly 属性,则无法通过 JS 脚本 读取到该 cookie 的信息,但还Application 中手动修改 cookie,所以只是在一定 ...

  5. flask文件下载

    后端的代码 # coding:utf-8 from flask import Flask app = Flask(__name__) @app.route("/upload", m ...

  6. windows 系统 MySQL_5.6.21安装教程

      1.双击安装文件 mysql_installer_community_V5.6.21.1_setup.1418020972.msi,等待安装界面出现,见下图: 2.勾选:I accept thel ...

  7. jQuery 勾选显示

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. php artisan db:seed 报错

    在laravel 5中执行,要执行数据填充时报如下错误 php artisan db:seed 错误: [ReflectionException]                        Cla ...

  9. git的使用学习笔记---合并分支

    一.使用场景 不同的分支需要合并 二.操作 1.首先要创建一个分支 git checkout -b mergedemo 创建文本 vim text.txt 添加文本 git add text.txt ...

  10. 通过 profiling 定位 golang 性能问题 - 内存篇 原创 张威虎 滴滴技术 2019-08-02

    通过 profiling 定位 golang 性能问题 - 内存篇 原创 张威虎 滴滴技术 2019-08-02