URAL 1029

思路:

dp+记录路径

状态:dp[i][j]表示到(i,j)这个位置为止的最少花费

初始状态:dp[1][i]=a[1][i](1<=i<=m)

状态转移:dp[i][j]=a[i][j]+max(dp[i-1][j],dp[i][j-1],dp[i][j+1])(注意扫的方向不同)

数组记录上一次的坐标,最后递归输出

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a)) const int N=;
const int INF=0x3f3f3f3f;
int a[N][N];
int dp[N][N];
pair<int,int> pre[N][N];
void dfs(int x,int y){
if(x==-||y==-)return ;
dfs(pre[x][y].first,pre[x][y].second);
cout<<y<<' ';
}
int main(){
ios::sync_with_stdio(false);
cin.tie();
int n,m;
mem(a,INF);
mem(dp,INF);
cin>>n>>m;
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
cin>>a[i][j];
}
}
for(int i=;i<=n;i++)for(int j=;j<=m;j++)pre[i][j].first=-,pre[i][j].second=-;
for(int i=;i<=m;i++)dp[][i]=a[][i];
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
if(dp[i][j]>a[i][j]+dp[i-][j]){
dp[i][j]=a[i][j]+dp[i-][j];
pre[i][j].first=i-;
pre[i][j].second=j;
}
if(dp[i][j]>a[i][j]+dp[i][j-]){
dp[i][j]=a[i][j]+dp[i][j-];
pre[i][j].first=i;
pre[i][j].second=j-;
}
}
for(int j=m;j>=;j--){
if(dp[i][j]>a[i][j]+dp[i-][j]){
dp[i][j]=a[i][j]+dp[i-][j];
pre[i][j].first=i-;
pre[i][j].second=j;
}
if(dp[i][j]>a[i][j]+dp[i][j+]){
dp[i][j]=a[i][j]+dp[i][j+];
pre[i][j].first=i;
pre[i][j].second=j+;
}
}
}
int ans=INF,id=;
for(int i=;i<=m;i++){
if(dp[n][i]<ans){
ans=dp[n][i];
id=i;
}
}
int x=n,y=id;
dfs(x,y);
cout<<endl;
return ;
}

URAL 1029 Ministry的更多相关文章

  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 Ministry 题解 题意 题解 程序 Ural 1029 Ministry 题解 题意 给定一个\(n\times m(1\le n \le10,1\le m \le50 ...

  3. URAL 1732 Ministry of Truth(KMP)

    Description In whiteblack on blackwhite is written the utterance that has been censored by the Minis ...

  4. URAL 1029

    题目大意:M层N列的矩阵(各元素均为正整数),找出一个路径从第一层到达第M层,使得路径上的所有数的和是所有可达路径中最小的,每次上到下一层以后就不能再上去,依次输出路径上的各点在所在层的列数. KB  ...

  5. URAL 1732. Ministry of Truth ( KMP 多模式串匹配 )

    问在第一个串中删掉几个字符能否得到第二个串.注意在第二个串中不连续的单词在第一个串中也必须不连续. 一组数据: Input: abababbbbababbb aba ab Output: I HAVE ...

  6. URAL - 1029 dp

    题意: n层楼,每层楼有m个房间.找出一个路径从第一层到达第M层,使得路径上的所有数的和是所有可达路径中最小的,每次上到下一层以后就不能再上去,依次输出路径上的各点在所在层的列数. 题解: 参考链接: ...

  7. URAL DP第一发

    列表: URAL 1225 Flags URAL 1009 K-based Numbers URAL 1119 Metro URAL 1146 Maximum Sum URAL 1203 Scient ...

  8. ural 1075. Thread in a Space

    1075. Thread in a Space Time limit: 1.0 secondMemory limit: 64 MB There are three points in a 3-dime ...

  9. BZOJ 1029 建筑抢修 贪心+堆

    又搞了一晚上OI,编了两道BZOJ和几道NOI题库,临走之前写两篇感想 noip越来越近了,韩大和clove爷已经开始停课虐我们了... 1029: [JSOI2007]建筑抢修 Time Limit ...

随机推荐

  1. VS中出现“链接器工具错误,XXX工具模块对于SAFESEH映像是不安全的”的解决方法

    1.“调试”菜单->“属性”->“配置属性”->“链接器”->“命令行” 2.在“其它选项”的输入框里输入 /SAFESEH:NO ,点击“应用”

  2. Listener—监听器

    什么是监听器? 监听器是Web应用程序事件模型的一部分 监听器的作用? 1:Web应用中某些状态发生改变的时候会产生相应的事件: a)servletContext.HttpSession.Servle ...

  3. uva12083 二分图 求最大独立集 转化为求最大匹配 由题意推出二分图

    这题大白书例题 : Frank 是一个思想有些保守的高中老师,有一次,他需要带一些学生出去旅行,但又怕其中一些学生在旅途中萌生爱意.为了降低这种事情的发生概率,他决定确保带出去的任意两个学生至少要满足 ...

  4. UVA 475

    /* 通过这题 学会了 两个词组 immediately to the left 是左邻的意思 immediately to the right 这个是右邻的意思 */ #include <io ...

  5. 10588 - Queuing at the doctors

    这题wa 了 八次 你说 巨弱  orz 大神   总结一下  没有将所有的情况考虑清楚 ,当有的时候一个人已经全部看完的时候 别的人还没开始 但是我就把他给结束了 #include <iost ...

  6. Java设计模式应用——策略模式

    对于相同类型相同类型的输入输出,在不同场景下需要使用不同的逻辑处理,则可以使用策略模式. 比如排序算法有堆排序,快速排序,冒泡排序,选择排序等.为了保证排序效率,需要在不同场景下选择不同排序算法,这时 ...

  7. 数据仓库基础(四)ODS、元数据

    本文转载自:http://www.cnblogs.com/evencao/archive/2013/06/14/3135691.html ODS的概念:是一个面向主题的.集成的.可变的.反应当前细节的 ...

  8. SNMP学习笔记之SNMPWALK 安装与使用详解

    0x00 简介 snmpwalk是SNMP的一个工具,它使用SNMP的GETNEXT请求查询指定OID(SNMP协议中的对象标识)入口的所有OID树信息,并显示给用户.通过snmpwalk也可以查看支 ...

  9. phonegap 开发案例

    PhoneGap-Android-HTML5-WebSocket 不使用任何框架,教你制作网页滑动切换效果 http://www.csdn.net/article/2012-04-17/2804644 ...

  10. 04: Mysql性能优化

    MySQL其他篇 目录: 参考网站 1.1 Mysql数据库的优化技术 1.2 数据库表设计 1.3 SQL优化 1.为查询缓存优化你的查询 2.EXPLAIN 你的 SELECT 查询 3. 当只要 ...