uva 590 dp
2015-09-10 14:50
232 查看
UVA 590 - Always on the run
小偷要从城市1经过k天道城市n,给出这n个城市之间的航班表,要求第k天到城市n的最小花费。dp[i][j] 第i天小偷在城市j的最小花费。
枚举第i-1天其所在的城市k,找出(k-j)在第i天的航班价格s,dp[i][j] = min(dp[i-1][k] + s);
[code]#include <bits/stdc++.h> using namespace std; const int INF = 999999999; struct Node { int b; int t[33]; }p[12][12]; int dp[1005][33]; int _get(int a, int b, int c) { if (p[b][c].b != 0 && p[b][c].t[a%p[b][c].b] != 0) { return p[b][c].t[a%p[b][c].b]; } else { return INF; } } int n, k; int main () { for (int cases = 1; scanf ("%d%d", &n, &k) == 2; ++cases) { if (n == 0 && k == 0) break; for (int i=1; i<=n; i++) { for (int j=1; j<=n; j++) { if (i == j) continue; scanf ("%d", &p[i][j].b); for (int k=0; k<p[i][j].b; k++) { scanf ("%d", &p[i][j].t[k]); } } } for (int i=0; i<=k; i++) { fill(dp[i], dp[i]+n+1, INF); } dp[0][1] = 0; for (int i=1; i<=k; i++) { for (int j=1; j<=n; j++) { for (int k=1; k<=n; k++) { if (k == j) continue; dp[i][j] = min(dp[i][j], dp[i-1][k] + _get(i-1, k, j)); } } } printf("Scenario #%d\n", cases); if (dp[k] == INF) printf("No flight possible.\n"); else printf("The best flight costs %d.\n", dp[k] ); printf("\n"); } return 0; }
相关文章推荐
- Week1----9月11日 格式化文字和段落
- hessian入门与springMVC框架集成---Service服务
- Search a 2D Matrix II 特殊数组的查找
- I2C 总线协议分析
- 乱码
- Qt之QTableWidget
- android 解决方法数超65536
- 敏捷开发
- BFS
- Android 4.4音量键控制音量流程
- SVN学习笔记11 -- Eclipse 中 SVN的相关操作 -- checkout and update
- Product of Array Except Self 数组除自身的所有乘积
- MongoDB—运维技术
- SQL Server 2012中的AlwaysOn尝试
- Win10 PIN密码开机登录如何设置 正确取消win10 pin登录密码图文教程
- Java获取客户端真实IP
- .Net中webBrowser控件指定IE版本
- Gtest学习笔记1.0
- sql 当前时间跟数据库字段做比较
- ZigZag Conversion