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< ...
随机推荐
- 完美串(区间dp)
完美串 Description 爱美之心人皆有之,GG也不例外.所以GG他对于完美串有一种热衷的爱.在GG眼中完美串是一个具有无比魅力的01子串.这个子串有之其魅力之处,对它取反后水平翻转,它又和它原 ...
- cocos基础教程(3)cocos3.x版本目录结构介绍
简介 cocos2d-x-3.x版本进行了很多优化,比如:将TTF字体用Atlas缓存,节点重排序官方声称提升了10倍速度,查找.移除节点方面也提高了10%,拆分渲染层到独立的线程运行: 另外,coc ...
- easyui 删除行bug
easyui删除行,出现了bug.(经常使用这个框架的人几乎都会遇到) 我也非常纳闷,今天特地试了很久. 最后发现,如果是自己datagrid('getRows') 然后迭代出来,最后算出行号,可以成 ...
- 对target="framename"的理解(实现分页的demo)
先上图,说明一下我主要想实现什么功能. 一.演示图 演示首页: 演示内容页(包括按钮切换页+模板内容页): 演示首页到演示内容页的一个演变过程:
- 消息通信库ZeroMQ 4.0.4安装指南
一.ZeroMQ介绍 ZeroMQ是一个开源的消息队列系统,按照官方的定义,它是一个消息通信库,帮助开发者设计分布式和并行的应用程序. 首先,我们需要明白,ZeroMQ不是传统的消息队列系统(比如Ac ...
- HTML快速入门4
七.表单 1. 概述 建立交互式的站点,需要使用 HTML 表单,它可以让用户提供信息,并对此作出处理.可以建立类似 复选框.单选按钮及文本框的控件. 掌握表单的使用对 Active Server P ...
- poj 3026 bfs+prim Borg Maze
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9718 Accepted: 3263 Description The B ...
- nyoj 20
http://acm.nyist.net/JudgeOnline/message.php?msg=已提交&url=status.php%3Fpid%3D20&second=0 #inc ...
- 再论pyquery
发现对于QQ群 空间文件的抓取毫无办法. QQ空间的代码可圈可点: 做了一个js的“客户端”,第一次加载时,将文件的列表信息全部抓取出来,然后基于js进行翻页和排序. 因此,想要抓取js渲染的dom, ...
- Segment Tree Build I & II
Segment Tree Build I The structure of Segment Tree is a binary tree which each node has two attribut ...