HDU 5092
http://acm.hdu.edu.cn/showproblem.php?pid=5092
卡读题,实质是每行取一个点,从上到下找一条路径权值和最小,点可以到达的地方是周围八个格子
类似数塔的dp,需要记录路径,当前行由上一行顶上的三个格子转移而来
#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
#include <algorithm>
#include <stack> using namespace std;
int n,m;
int a[][],dp[][],pre[][];
int dx[]={-,-,-};
int dy[]={,,-}; struct node{
int x,y;
}; int main(){
int T;
scanf("%d",&T);
for(int cas=;cas<=T;cas++){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
scanf("%d",&a[i][j]);
}
}
for(int i=;i<;i++)
for(int j=;j<;j++)
dp[i][j]=0xfffffff;
for(int i=;i<=m;i++)
dp[][i]=a[][i];
memset(pre,-,sizeof(pre));
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
if(j->= && j+<=m){
//dp[i][j]=min(dp[i][j],a[i][j]+min(dp[i-1][j],min(dp[i-1][j-1],dp[i-1][j+1])));
int t=min(dp[i-][j],min(dp[i-][j-],dp[i-][j+]));
if(a[i][j]+t<dp[i][j]){
dp[i][j]=a[i][j]+t;
if(dp[i-][j+]<=dp[i-][j-] && dp[i-][j+]<=dp[i-][j])
pre[i][j]=;
else if(dp[i-][j]<=dp[i-][j-] && dp[i-][j]<=dp[i-][j+])
pre[i][j]=;
else pre[i][j]=;
}
}
else if(j->=){
//dp[i][j]=min(dp[i][j],a[i][j]+min(dp[i-1][j],dp[i-1][j-1]));
int t=min(dp[i-][j],dp[i-][j-]);
if(a[i][j]+t<dp[i][j]){
dp[i][j]=a[i][j]+t;
if(dp[i-][j]<=dp[i-][j-])
pre[i][j]=;
else pre[i][j]=;
}
}
else if(j+<=m){
//dp[i][j]=min(dp[i][j],a[i][j]+min(dp[i-1][j],dp[i-1][j+1]));
int t=min(dp[i-][j],dp[i-][j+]);
if(a[i][j]+t<dp[i][j]){
dp[i][j]=a[i][j]+t;
if(dp[i-][j+]<=dp[i-][j])
pre[i][j]=;
else pre[i][j]=;
}
}
}
}
int ans=0xfffffff;
int res;
for(int i=;i<=m;i++){
//ans=min(ans,dp[n][i]);
if(ans>=dp[n][i]){
ans=dp[n][i];
res=i;
}
}
printf("Case %d\n",cas);
stack <node> s;
node st;
st.x=n;st.y=res;
s.push(st);
while(){
if(st.x==)break;
int xx=st.x+dx[pre[st.x][st.y]];
int yy=st.y+dy[pre[st.x][st.y]];
st.x=xx;st.y=yy;
s.push(st);
}
for(int i=;i<=n;i++){
if(i==)printf("%d",s.top().y);
else printf(" %d",s.top().y);
s.pop();
}
putchar('\n');
}
return ;
}
HDU 5092的更多相关文章
- hdu 5092 线裁剪(纵向连线最小和+输出路径)
http://acm.hdu.edu.cn/showproblem.php?pid=5092 给一个m*n的矩阵,找到一个纵向的"线"使得线上的和最小并输出这条线,线能向8个方向延 ...
- hdu 5092 Seam Carving
这道题 我没看出来 他只可以往下走,我看到的 8-connected :所以今天写一下如果是 8-connected 怎么解: 其实说白了这个就是从上到下走一条线到达最后一行的距离最小: 从Map[a ...
- HDU 5092 DP
DP水题 求从上到下走完,使所取得权值最小,并输出路径,若有多个满足,则输出靠右的 #include "stdio.h" #include "string.h" ...
- HDU 5092 Seam Carving (dp)
题意,给一个数字矩阵,要求从上往下的一条路径,使这条路径上数字之和最小,如有多条输出最靠右的一条. 数字三角形打印路径... 一般打印路径有两种选择,一是转移的时候加以记录,二是通过检查dp值回溯. ...
- hdu 5092 Seam Carving (简单数塔DP,题没读懂,,不过可以分析样例)
题意: 给一个m*n的矩阵,每格上有一个数. 找从第1行到第m行的一条路径,使得这条路径上的数之和最小. 路径必须满足相邻两行所选的两个数的纵坐标相邻(即一个格子必须是另一个格子的周围八个格子中的一个 ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
随机推荐
- 聚类算法:K-means 算法(k均值算法)
k-means算法: 第一步:选$K$个初始聚类中心,$z_1(1),z_2(1),\cdots,z_k(1)$,其中括号内的序号为寻找聚类中心的迭代运算的次序号. 聚类中心的向量值可任意设 ...
- 读取Cookie及Cookie所有属性操作方法
读取Cookie及Cookie所有属性操作方法 2013-08-04 22:21:43| 分类: 技术 | 标签:cookie |举报|字号 订阅 要把Cookie发送到客户端,Servle ...
- 使用Yeoman,Grunt和Bower开发AngularJS(译)
使用Yeoman产生AngularJS的主要骨架 使用Grunt加速开发和帮助执行 使用Bower来加入第三方插件和框架——third party plugins/frameworks 一.准备工作 ...
- Word文档增加快捷键
- BZOJ3942 [Usaco2015 Feb]Censoring
维护一个栈...如果栈顶出现了要被删除的字符串就全删掉就好了,判断的话...kmp就行了 /****************************************************** ...
- J2EE开发实战基础系列一 HelloWorld【转】
开始咱们的第一个程序,首先是配置环境,按照上一章所描述的方式下载开发工具,然后配置Java环境变量,给大家看下具体的结构: 环境变量配置OK的提示,如上图. Eclipse和Tomcat的文件目录 ...
- jQuery滚动条回到顶部或指定位置
jQuery滚动条回到顶部或指定位置 在很多网站,为了增强用户体验,我们会看到回到顶部的按钮,不用手动拖拽滚动条就能回到顶部,非常方便.下面就介绍用jquery实现的滚动到顶部的代码 $(functi ...
- Nginx 在windows下配合iis搭建负载均衡过程 [转]
因为项目遇到大量图片存储问题,虽然现在我们图片还不是很多(目前在1T上下,预计增长速度每年1.3倍的增长速度),自己在思考如何有效地存储大量图片时,查找一些资料,看到了,有人使用 Nginx搭建服务器 ...
- BroadcastReceiver的简介
BroadcastReceiver本质上属于一个监听器,因此实现BroadcastReceiver的方法只要重写BroadcastReceiver的onReceive(Context context ...
- GFS: Evolution on Fast-forward
GFS: Evolution on Fast-forward by Marshall Kirk McKusick, Sean Quinlan | August 7, 2009 A discussion ...