DP+路径 URAL 1029 Ministry
/*
题意:就是从上到下,找到最短路,输出路径
DP+路径:状态转移方程:dp[i][j] = min (dp[i-1][j], dp[i][j-1], dp[i][j+1]) + a[[i][j]; (类似数塔问题)
关键在记录路径,可以用pre[x][y] = -1/0/1/2 区分,DFS回溯输出
详细解释:http://www.cnblogs.com/staginner/archive/2012/05/02/2479658.html
*/
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <vector>
#include <stack>
using namespace std; const int MAXN = 1e2 + ;
const int MAXM = 5e2 + ;
const int INF = 0x3f3f3f3f;
int a[MAXN][MAXM];
int dp[MAXN][MAXM];
int pre[MAXN][MAXM]; void DFS(int x, int y)
{
if (pre[x][y] == -) {printf ("%d", y); return ;}
if (pre[x][y] == ) DFS (x-, y);
else if (pre[x][y] == ) DFS (x, y-);
else DFS (x, y+); printf (" %d", y);
} int main(void) //URAL 1029 Ministry
{
//freopen ("X.in", "r", stdin); int n, m;
while (scanf ("%d%d", &n, &m) == )
{
memset (pre, -, sizeof (pre));
memset (dp, , sizeof (dp));
for (int i=; i<=n; ++i)
for (int j=; j<=m; ++j) scanf ("%d", &a[i][j]); for (int i=; i<=m; ++i) {dp[][i] = a[][i]; pre[][i] = -;}
for (int i=; i<=n; ++i)
{
for (int j=; j<=m; ++j) {dp[i][j] = dp[i-][j] + a[i][j]; pre[i][j] = ;}
for (int j=; j<=m; ++j)
{
if (dp[i][j] > dp[i][j-] + a[i][j]) {dp[i][j] = dp[i][j-] + a[i][j]; pre[i][j] = ;}
}
for (int j=m-; j>=; --j)
{
if (dp[i][j] > dp[i][j+] + a[i][j]) {dp[i][j] = dp[i][j+] + a[i][j]; pre[i][j] = ;}
}
} int mn = INF; int x = n; int y = ;
for (int i=; i<=m; ++i)
{
if (mn > dp[n][i]) {mn = dp[n][i]; y = i;}
}
//printf ("%d\n", mn);
DFS (x, y); puts ("");
} return ;
}
DP+路径 URAL 1029 Ministry的更多相关文章
- Ural 1029 Ministry 题解
目录 Ural 1029 Ministry 题解 题意 题解 程序 Ural 1029 Ministry 题解 题意 给定一个\(n\times m(1\le n \le10,1\le m \le50 ...
- URAL 1029 Ministry
URAL 1029 思路: dp+记录路径 状态:dp[i][j]表示到(i,j)这个位置为止的最少花费 初始状态:dp[1][i]=a[1][i](1<=i<=m) 状态转移:dp[i] ...
- POJ1015 && UVA - 323 ~Jury Compromise(dp路径)
In Frobnia, a far-away country, the verdicts in court trials are determined by a jury consisting of ...
- Codeforces Round #598 (Div. 3)E(dp路径转移)
题:https://codeforces.com/contest/1256/problem/E 题意:给一些值,代表队员的能力值,每组要分3个或3个以上的人,然后有个评价值x=(队里最大值-最小值), ...
- URAL1029. Ministry(DP+路径)
链接 路径麻烦啊 很多细节 倒回去搜一遍 卡了一节数据库.. #include <iostream> #include<cstdio> #include<cstring& ...
- URAL - 1029 dp
题意: n层楼,每层楼有m个房间.找出一个路径从第一层到达第M层,使得路径上的所有数的和是所有可达路径中最小的,每次上到下一层以后就不能再上去,依次输出路径上的各点在所在层的列数. 题解: 参考链接: ...
- 记忆化搜索(DP+DFS) URAL 1183 Brackets Sequence
题目传送门 /* 记忆化搜索(DP+DFS):dp[i][j] 表示第i到第j个字符,最少要加多少个括号 dp[x][x] = 1 一定要加一个括号:dp[x][y] = 0, x > y; 当 ...
- poj2264 dp+路径
//Accepted 208K 0MS //dp //最长公共子序列+路径 #include <cstdio> #include <cstring> #include < ...
- poj1141Brackets Sequence(dp+路径)
链接 dp好想 根据它定义的 记忆化下就行 路径再dfs一遍 刚开始以为要判空格 所以加了判空格的代码 后来知道不用 .. #include <iostream> #include< ...
随机推荐
- Billboard(线段树)
Billboard Time Limit:8000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit St ...
- [Effective JavaScript 笔记] 第11条:熟练掌握闭包
理解闭包三个基本的事实 第一个事实:js允许你引用在当前函数以外定义的变量. function makeSandwich(){ var magicIngredient=”peanut butter”; ...
- [BZOJ3343]教主的魔法
[BZOJ3343]教主的魔法 试题描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.… ...
- weblogic <BEA-000438>
现在创建域并启动服务器, 或许会发现如下提示的错误信息:<Error> <Socket> <BEA-000438> <Unable to load perfo ...
- c# 继承,多态,new /overrid 区别, 引用父类的方法
好久没碰c#了,偶尔需要制作点小工具.为了一个灵活的架构设计,需要对继承/多态有比较深刻的理解. 不料忘得差不多了,好吧,再来回忆下.直接上代码了,如下: using System; using Sy ...
- 【转】android中Uri.parse()用法
1,调web浏览器 Uri myBlogUri = Uri.parse("http://xxxxx.com"); returnIt = new Intent(Intent.ACTI ...
- OI 中的 FFT
不行啊最近备考简直变成文化狗了= =..我还脑洞大开想学俄语什么心态.. 简单地说一下FFT(来,跟我一起念,法〰法〜塔,法斯特~福铝页~圈死佛而母).. FFT本来是做信号变换用的,当然OI和信号变 ...
- 什么是响应式Web设计?怎样进行?
http://beforweb.com/node/6/page/0/3 开始第一篇.老规矩,先无聊的谈论天气一类的话题.十一长假,天气也终于开始有些秋天的味道,坐在屋里甚至觉得需要热咖啡.话说两年前也 ...
- vista/win7/win8区别
1. Vista的内核版本号是:Windows 6.0: Windows 7的内核是:Windows 6.1: Windows 8的内核是:Windows 6.2 ...
- TCP/IP详解学习笔记(5)-- ICMP:internet 控制报文协议
1.概述 ICMP是(Internet Control Message Protocol)Internet控制报文协议.它是TCP/IP协议族的一个子协议,用于在IP主机.路由器之间传递控制 ...