URAL - 1029 dp
题意:
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的更多相关文章
- DP+路径 URAL 1029 Ministry
题目传送门 /* 题意:就是从上到下,找到最短路,输出路径 DP+路径:状态转移方程:dp[i][j] = min (dp[i-1][j], dp[i][j-1], dp[i][j+1]) + a[[ ...
- URAL 1029 Ministry
URAL 1029 思路: dp+记录路径 状态:dp[i][j]表示到(i,j)这个位置为止的最少花费 初始状态:dp[1][i]=a[1][i](1<=i<=m) 状态转移:dp[i] ...
- Ural 1029 Ministry 题解
目录 Ural 1029 Ministry 题解 题意 题解 程序 Ural 1029 Ministry 题解 题意 给定一个\(n\times m(1\le n \le10,1\le m \le50 ...
- URAL 1036(dp+高精度)
Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status Pract ...
- URAL 1029
题目大意:M层N列的矩阵(各元素均为正整数),找出一个路径从第一层到达第M层,使得路径上的所有数的和是所有可达路径中最小的,每次上到下一层以后就不能再上去,依次输出路径上的各点在所在层的列数. KB ...
- C - K-inversions URAL - 1523 (dp + 线段树)
题目链接:https://cn.vjudge.net/contest/275079#problem/C 具体思路:我们可以分层的去建立,假设我们要找k层,我们可以先把满足1.2....k-1层的满足情 ...
- URAL DP第一发
列表: URAL 1225 Flags URAL 1009 K-based Numbers URAL 1119 Metro URAL 1146 Maximum Sum URAL 1203 Scient ...
- Ural 1073 Square Country (DP)
题目地址:Ural 1073 DP水题.也能够说是背包. #include <iostream> #include <cstdio> #include <string&g ...
- hdu 6006
HDU - 6006 Engineer Assignment 我参考了这份题解. 贴上我比较拙的代码,留念一下. /** * 想到状态压缩的dp问题就解决了一半. */ #include <st ...
随机推荐
- 大数相加Java
题目 以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回. 分析 两个字符串,定义两个指针,分别从这两个字符串的结尾开始遍历,因为可能字符串1比字符串2长度要长,因此只要两者其中有 ...
- java进阶(31)--TreeSet集合、TreeMap集合、自平衡二叉树
一.TreeSet集合简单 1.TreeSet集合底层是一个TreeMap 2.TreeMap集合底层是一个二叉树 3.放到TreeSet集合的元素等同于放到TreeMap集合的Key部分 4.Tre ...
- python optparse模块的用法
引用原博主文章链接: https://www.cnblogs.com/darkpig/p/5717902.html
- 阅读lodash源码之旅数组方法篇-compact和concat
鲁迅说过:只有阅读过优秀库源码的人,才能配的上是真正的勇士. compact 创建一个新数组,包含原数组中所有的非假值元素.例如false, null,0, "", undefin ...
- MySQL中UPDATE语句里SET后使用AND的执行过程和结果分析
使用SQL中的UPDATE关键字更新多个字段值时,SET后面的更新字段应该使用逗号而不能用AND.虽然用AND不会报错,但会使更新结果错误,下面我将通过场景来分析当我们使用AND时SQL的执行过程和为 ...
- 解决Python内CvCapture视频文件格式不支持问题
解决Python内CvCapture视频文件格式不支持问题 在读取视频文件调用默认的摄像头cv.VideoCapture(0)会出现下面的视频格式问题 CvCapture_MSMF::initStre ...
- 网络编程 — Linux TCP服务端和客户端
1. 服务端 #include <stdlib.h> #include <string.h> #include <errno.h> #include <sig ...
- CSS Color Adjustment Module Level 1
CSS Color Adjustment Module Level 1 https://drafts.csswg.org/css-color-adjust-1/ DarkMode 适配指南 | 微信开 ...
- The OAuth 2.0 Authorization Framework OAuth2.0的核心角色code 扫码登录
RFC 6749 - The OAuth 2.0 Authorization Framework https://tools.ietf.org/html/rfc6749 The OAuth 2.0 a ...
- WPF combobox设置默认选项不生效的问题
combobox 是常用的控件,当我们需要绑定设置默认选项时,往往会绑定 SelectedItem 属性去设置, 可是你会惊奇地发现SelectedItem的值绑定了, 它依旧是熟悉的模样 根据官方的 ...