UVA116Unidirectional TSP(DP+逆推)
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18206
题意:M*N的数阵,从左边一列到右边一列走过的数的和的最小。并输出路径和最小值,每一个数能右上,右,右下三种决策,第一行右上是第m行,第m行右下是第1行。
dp【i】【j】存i行j列到最后一列的和的最小,然后逆推,输出路径,就从第一列找最小的dp,然后减去这个数,找右上,右,右下相等的dp,同时行数还得是最小的,思路还是很好想的。做的就是有点麻烦
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
const int INF = 0x3f3f3f3f;
int a[][],dp[][];
int main()
{
int n,m;
while(scanf("%d%d", &m, &n) != EOF)
{
memset(a, INF, sizeof(a));
for(int i = ; i <= m; i++)
{
for(int j = ; j <= n; j++)
{
scanf("%d", &a[i][j]);
}
} memset(dp, INF, sizeof(dp));
for(int i = ; i <= m; i++)
dp[i][n] = a[i][n]; for(int j = n - ; j >= ; j--)
{
for(int i = ; i <= m; i++)
{
if(i == )
{
dp[i][j] = min(dp[i][j], a[i][j] + dp[m][j + ]);
dp[i][j] = min(dp[i][j], a[i][j] + dp[i][j + ]);
dp[i][j] = min(dp[i][j], a[i][j] + dp[i + ][j + ]);
}
else if(i == m)
{
dp[i][j] = min(dp[i][j], a[i][j] + dp[i - ][j + ]);
dp[i][j] = min(dp[i][j], a[i][j] + dp[i][j + ]);
dp[i][j] = min(dp[i][j], a[i][j] + dp[][j + ]);
}
else
{
dp[i][j] = min(dp[i][j], a[i][j] + dp[i - ][j + ]);
dp[i][j] = min(dp[i][j], a[i][j] + dp[i][j + ]);
dp[i][j] = min(dp[i][j], a[i][j] + dp[i + ][j + ]);
}
}
} int start;
int ans = INF;
for(int i = ; i <= m; i++)
{
if(ans > dp[i][])
{
ans = dp[i][];
start = i;
}
} for(int j = ; j <= n; j++)
{
printf("%d ",start);
int minn = INF;
if(start == )
{
if(dp[start][j - ] - a[start][j - ] == dp[m][j])
{
minn = min(m, minn);
}
if(dp[start][j - ] - a[start][j - ] == dp[start][j])
{
minn = min(start, minn);
}
if(dp[start][j - ] - a[start][j - ] == dp[start + ][j])
{
minn = min(start + , minn);
}
start = minn;
continue;
}
else if(start == m)
{
if(dp[start][j - ] - a[start][j - ] == dp[start - ][j])
minn = min(minn, start - );
if(dp[start][j - ] - a[start][j - ] == dp[start][j])
minn = min(minn, start);
if(dp[start][j - ] - a[start][j - ] == dp[][j])
minn = min(minn, );
start = minn;
continue;
}
else
{
if(dp[start][j - ] - a[start][j - ] == dp[start - ][j])
minn = min(minn, start - );
if(dp[start][j - ] - a[start][j - ] == dp[start][j])
minn = min(minn, start);
if(dp[start][j - ] - a[start][j - ] == dp[start + ][j])
minn = min(minn, start + );
start = minn;
continue;
}
}
printf("%d\n%d\n",start,ans);
}
return ;
}
UVA116Unidirectional TSP(DP+逆推)的更多相关文章
- 概率dp——逆推期望+循环迭代zoj3329
首先要推出dp[i]的期望方程,会发现每一项都和dp[0]相关, 那我们将dp[i]设为和dp[0]有关的式子dp[i]=a[i]*dp[0]+b[i],然后再回代到原来的期望方程里 然后进行整理,可 ...
- hdu 3853 LOOPS (概率dp 逆推求期望)
题目链接 LOOPS Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others)Tota ...
- UVA 1025 A Spy in the Metro 【DAG上DP/逆推/三维标记数组+二维状态数组】
Secret agent Maria was sent to Algorithms City to carry out an especially dangerous mission. After s ...
- UVA116-Unidirectional TSP(动态规划基础)
Problem UVA116-Unidirectional TSP Accept: 7167 Submit: 56893Time Limit: 3000 mSec Problem Descripti ...
- HDU 1176-免费馅饼(DP_逆推)
免费馅饼 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- sgu 495. Kids and Prizes (简单概率dp 正推求期望)
题目链接 495. Kids and Prizes Time limit per test: 0.25 second(s)Memory limit: 262144 kilobytes input: s ...
- HDU 5844 LCM Walk(数学逆推)
http://acm.hdu.edu.cn/showproblem.php?pid=5584 题意: 现在有坐标(x,y),设它们的最小公倍数为k,接下来可以移动到(x+k,y)或者(x,y+k).现 ...
- hdu 5063 操作逆推+mul每次要*2%(modo - 1)
http://acm.hdu.edu.cn/showproblem.php?pid=5063 只有50个询问,50个操作逆推回去即可,注意mul每次要*2%(modo - 1)因为是指数! #incl ...
- uva10537 dijkstra + 逆推
21:49:45 2015-03-09 传送 http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8& ...
随机推荐
- beanFactoory介绍
- NOI 1.7编程基础之字符串(35题)
01:统计数字字符个数 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一行字符,统计出其中数字字符的个数. 输入 一行字符串,总长度不超过255. 输出 ...
- C语言 百炼成钢12
//题目34:对10个数进行排序 #include<stdio.h> #include<stdlib.h> //分析:使用冒泡排序 void main(){ ] = { , , ...
- ListView缓存机制踩过的坑
ListView,GrildView使用时候经常会用到缓存机制,随意一搜,例子成千上万,但是讲解都是很一致,跟自己踩的坑很少有人讲解到. 测试 需求: GrildView 分三列显示,默认背景为白色, ...
- Python类库下载
https://sourceforge.net/projects/pywin32/files/pywin32/ WMI库的安装 下载 http://timgolden.me.uk/python/wmi ...
- rem详解及使用方法
好像有一段时间没有写博客了……今天刚好总结一下rem的使用方法 首先,先说一个常识,浏览器的默认字体高都是16px.步入正题-----〉 兼容性: 目前,IE9+,Firefox.Chrome.Saf ...
- grootJs 属性过滤器
index10.html <html><head> <title>属性过滤器</title> <script src="jquery-1 ...
- PHP+memcache扩展(集成环境wampserver环境下)
按照别人的步骤,安装和配置后没有任何的错误提示!在计算机服务里面也看到memcached服务已经开启,但是phpinfo里面就是没有memcache已经安装成功的信息!后来才发现原来是没有开启wamp ...
- 如何使用bat命令批量删除指定文件名字的符号
新建一个TXT文本,将下面的内容复制进去 @Echo Off&SetLocal ENABLEDELAYEDEXPANSIONFOR %%a in (*) do (set "name= ...
- 看别人的代码学习的css
<ul class='y1'> <li><a href="#">菜单</a></li> <li ...