题意:

给一个m*n的矩阵,每格上有一个数。

找从第1行到第m行的一条路径,使得这条路径上的数之和最小。

路径必须满足相邻两行所选的两个数的纵坐标相邻(即一个格子必须是另一个格子的周围八个格子中的一个)

输出每一行取的数的列值。  若有多个答案,则路径要求尽量靠右。

思路:

简单数塔DP。题比较不好读,不过可以分析样例。

代码:

int T,m,n;
int a[105][105], f[105][105];
int path[105]; int main(){
cin>>T;
rep(t,1,T){
scanf("%d%d",&m,&n);
rep(i,1,m) rep(j,1,n) scanf("%d",&a[i][j]);
mem(f,inf);
rep(j,1,n) f[1][j]=a[1][j];
rep(i,2,m){
rep(j,1,n){
int y;
y=j-1; if(y>=1 && f[i-1][y]+a[i][j]<=f[i][j]) f[i][j]=f[i-1][y]+a[i][j];
y=j; if(y>=1 && f[i-1][y]+a[i][j]<=f[i][j]) f[i][j]=f[i-1][y]+a[i][j];
y=j+1; if(y<=n && f[i-1][y]+a[i][j]<=f[i][j]) f[i][j]=f[i-1][y]+a[i][j];
}
} int mins=inf, minsp=-1;
rep(i,1,n) if(f[m][i]<=mins) mins=f[m][i],minsp=i;
path[m]=minsp;
rep2(i,m-1,1){
int v=path[i+1];
int temp=inf, tempP;
if(v+1<=n && f[i][v+1]<temp) temp=f[i][v+1],tempP=v+1;
if(f[i][v]<temp) temp=f[i][v], tempP=v;
if(v-1>=1 && f[i][v-1]<temp) temp=f[i][v-1],tempP=v-1;
path[i]=tempP;
}
printf("Case %d\n",t);
rep(i,1,m-1) printf("%d ",path[i]); printf("%d\n",path[m]);
}
}

hdu 5092 Seam Carving (简单数塔DP,题没读懂,,不过可以分析样例)的更多相关文章

  1. hdoj 5092 Seam Carving 【树塔DP变形 + 路径输出】 【简单题】

    Seam Carving Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Tot ...

  2. HDU 5092 Seam Carving (dp)

    题意,给一个数字矩阵,要求从上往下的一条路径,使这条路径上数字之和最小,如有多条输出最靠右的一条. 数字三角形打印路径... 一般打印路径有两种选择,一是转移的时候加以记录,二是通过检查dp值回溯. ...

  3. hdu 5092 Seam Carving

    这道题 我没看出来 他只可以往下走,我看到的 8-connected :所以今天写一下如果是 8-connected 怎么解: 其实说白了这个就是从上到下走一条线到达最后一行的距离最小: 从Map[a ...

  4. 递推DP HDOJ 5092 Seam Carving

    题目传送门 /* 题意:从上到下,找最短路径,并输出路径 DP:类似数塔问题,上一行的三个方向更新dp,路径输出是关键 */ #include <cstdio> #include < ...

  5. HDU 1176 免费馅饼(数塔dp)

    一开始被吓到了,后来再仔细一读发现就是一个数塔,没有那么复杂 #include<stdio.h> #include<string.h> #include<algorith ...

  6. hdu 5902 Seam Carving

    水题,直接上代码了 #include<cstdio> #include<cstring> #include<iostream> #include<cmath& ...

  7. HDU5092——Seam Carving(动态规划+回溯)(2014上海邀请赛重现)

    Seam Carving DescriptionFish likes to take photo with his friends. Several days ago, he found that s ...

  8. Programming Assignment 2: Seam Carving

    编程作业二 作业链接:Seam Carving & Checklist 我的代码:SeamCarver.java 问题简介 接缝裁剪(Seam carving),是一个可以针对照片内容做正确缩 ...

  9. ACM: HDU 5418 Victor and World - Floyd算法+dp状态压缩

    HDU 5418 Victor and World Time Limit:2000MS     Memory Limit:131072KB     64bit IO Format:%I64d & ...

随机推荐

  1. 一个简单的session传值学习

    a.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  2. Android学习记录(二)——第一次hello world及遇到的gradle安装问题

    开始一个简单的hello world项目,简单了解Android studio的使用方法 第一步,打开Android studio,点击Create New Project 第二步,选择需要的模板 T ...

  3. ARP-NAT(MAC Address Translation)的原理

    本文部分图片来自: http://wiki.deliberant.com/faq/wireless-bridge-routing-arpnat/ https://wiki.openwrt.org/do ...

  4. Nginx系列(10)- Nginx配置文件详解

    nginx文件结构 ... #全局块 events { #events块 ... } http #http块 { ... #http全局块 server #server块 { ... #server全 ...

  5. Docker DevOps实战:GitLab+Jenkins(1)- GitLab容器搭建、使用SourceTree pull/push项目

    GitLab容器搭建 # 创建GitLab容器# --restart always #重启,容器自动重启# --privileged=true #容器内使用root权限 [root@localhost ...

  6. Jmeter系列(11)- 自动化压力测试逻辑思路及例子

    为什么需要进行自动化压力测试 手动逐步加压,需要人工改变并发数,还要等待.所有,我们完全可以制定好策略,让程序自动加压,自动等待,输出报告 实现思路 Jmeter脚本(.jmx文件)- 压测逻辑 Sh ...

  7. phpmyadmin 设置密码

    例如 xampp 安装路径为 /opt/lampp/, copy 一份默认的配置 cp /opt/lampp/phpmyadmin/libraries/config.default.php /opt/ ...

  8. Fabric SSH链接时关于找不到主机的问题

    先上一段简单的fabric代码: from __future__ import with_statementfrom fabric.api import *env.user = 'zhangsan'e ...

  9. windows环境下配置Kafaka

    一.安装Zookeeper(Kafaka依赖于zookeeper进行服务注册和管理) 1. 1   下载zookeeper:http://mirror.bit.edu.cn/apache/zookee ...

  10. 一个Electron的设计缺陷及应对方案

    当你想实现阻止Electron窗口关闭,并弹出询问对话框,提示用户:"文章尚未保存,是否要关闭窗口"这类业务时,那么你99%会碰到这个BUG: https://github.com ...