HDU 5092 Seam Carving (dp)
题意,给一个数字矩阵,要求从上往下的一条路径,使这条路径上数字之和最小,如有多条输出最靠右的一条。
数字三角形打印路径。。。
一般打印路径有两种选择,一是转移的时候加以记录,二是通过检查dp值回溯。
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
const int maxn = ;
int g[maxn+][maxn];
int d[maxn+][maxn];
int pa[maxn+][maxn];
int m,n;
const int INF = 1e9;
void init(){
memset(*pa,-,sizeof(*pa));
for(int i = ; i < maxn; i++)
d[i][] = INF;
} vector<int> ans;
void print_ans(int s){
ans.clear();
ans.push_back(s);
for(int i = m-; i > ; i--){
s = pa[i][s];
ans.push_back(s);
}
for(int i = ans.size()-; i > ;i--){
printf("%d ",ans[i]);
}
printf("%d\n",ans[]);
} void work()
{
for(int i = ; i <= n; i++ )
d[][i] = g[][i];
for(int i = ; i < m; i++){
d[i][n+] = INF;
}
for(int i = ; i < m ;i++){
for(int j = ; j <= n ; ++j ){
int Min = -;
for(int k = ; k <=; k++){
if(d[i-][j+k] <= d[i-][j+Min]){
Min = k;
}
}
pa[i][j] = j+Min;
d[i][j] = d[i-][j+Min] + g[i][j];
}
}
int Min = ;
for(int i = ; i <= n; i++ ){
if(d[m-][Min] >= d[m-][i]){
Min = i;
}
}
print_ans(Min);
} int main()
{
int T;
init();
scanf("%d",&T);
for(int i = ; i <= T; i++){
printf("Case %d\n",i);
scanf("%d%d",&m,&n);
for(int i = ; i < m; i++)
for(int j = ; j <= n; j++)
scanf("%d",g[i]+j);
work();
}
return ;
}
HDU 5092 Seam Carving (dp)的更多相关文章
- hdu 5092 Seam Carving (简单数塔DP,题没读懂,,不过可以分析样例)
题意: 给一个m*n的矩阵,每格上有一个数. 找从第1行到第m行的一条路径,使得这条路径上的数之和最小. 路径必须满足相邻两行所选的两个数的纵坐标相邻(即一个格子必须是另一个格子的周围八个格子中的一个 ...
- HDU 5791:Two(DP)
http://acm.hdu.edu.cn/showproblem.php?pid=5791 Two Problem Description Alice gets two sequences A ...
- HDU 4833 Best Financing(DP)(2014年百度之星程序设计大赛 - 初赛(第二轮))
Problem Description 小A想通过合理投资银行理财产品达到收益最大化.已知小A在未来一段时间中的收入情况,描述为两个长度为n的整数数组dates和earnings,表示在第dates[ ...
- HDU 4833 Best Financing (DP)
Best Financing Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 1422 重温世界杯(DP)
点我看题目 题意 : 中文题不详述. 思路 : 根据题目描述及样例可以看出来,如果你第一个城市选的是生活费减花费大于等于0的时候才可以,最好是多余的,这样接下来的就算是花超了(一定限度内的花超),也可 ...
- HDU 1176 免费馅饼(DP)
点我看题目 题意 : 中文题.在直线上接馅饼,能接的最多是多少. 思路 :这个题其实以前做过.....你将这个接馅饼看成一个矩阵,也不能说是一个矩阵,反正就是一个行列俱全的形状,然后秒当行,坐标当列, ...
- hdu 4055 Number String(dp)
Problem Description The signature of a permutation is a string that is computed as follows: for each ...
- 【HDU - 4345 】Permutation(DP)
BUPT2017 wintertraining(15) #8F 题意 1到n的排列,经过几次置换(也是一个排列)回到原来的排列,就是循环了. 现在给n(<=1000),求循环周期的所有可能数. ...
- HDU 5375 Gray code(DP)
题意:给一串字符串,里面可能出现0,1,?,当中问号可能为0或1,将这个二进制转换为格雷码后,格雷码的每位有一个权值,当格雷码位取1时.加上该位权值,求最大权值和为多少. 分析:比赛的时候愚了.竟然以 ...
随机推荐
- HDU - 1171 Big Event in HDU 多重背包
B - Big Event in HDU Nowadays, we all know that Computer College is the biggest department in HDU. B ...
- Razor与HTML混合输出陷阱与技巧
3,Razor与HTML混合输出陷阱与技巧 属性名称误判 有时候我们必须让html内容与razor语句紧接在一起, eg: 您好,a先生 假设变量名称为ViewBag.Name, 您好, ...
- Python实现二叉树的前序、中序、后序、层次遍历
有关树的理论部分描述:<数据结构与算法>-4-树与二叉树: 下面代码均基于python实现,包含: 二叉树的前序.中序.后序遍历的递归算法和非递归算法: 层次遍历: 由前序序列.中 ...
- codevs1105 过河
1105 过河 2005年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 在河上有一座独木桥,一 ...
- IT兄弟连 Java语法教程 Java开发环境 JVM、JRE、JDK
要想开发Java程序,就需要知道什么是JVM.JRE以及JDK.JVM是运行Java程序的核心,JRE是支持Java程序运行的环境,而JDK是Java开发的核心,下面我们分别具体介绍它们以及它们之间的 ...
- 内置对象(Math对象、Date对象、Array对象、String对象)常用属性和方法
Math对象 Math 是一个内置对象, 它具有数学常数和函数的属性和方法.不是一个函数对象. 与其它全局对象不同的是, Math 不是一个构造函数. Math 的所有属性和方法都是静态的. 跟数学 ...
- java.sql.SQLException: Could not commit with auto-commit set on
This kind of exceptions occur when the Oracle JDBC Driver (ojdbc6.jar) version 12 or above will be u ...
- XMD DTD约束 实体学习X1 普通实体 参数实体 内部实体 外部实体 内置实体 解析实体 不解析实体 实体声明 实体引用 字符引用
文档实体可能就是整个XML文档
- SWT的基本组件使用
1按钮组件(Button) (1)Button组件常用样式 SWT.PUSH按钮 SWT.CHECK多选按钮 SWT.RADIO单选按钮 SWT.ARROW箭头按钮 SWT.NONE默认按钮 SWT. ...
- css绘制各种形状
代码:http://runjs.cn/code/9lyjtbxl: 效果:http://sandbox.runjs.cn/show/9lyjtbxl <!DOCTYPE html> < ...