当前位置: 首页 > news >正文

UVa 590 Always on the Run

题目描述

题目要求规划一条kkk天的旅行路线,每天从当前城市飞往另一个城市,第kkk天结束时必须在城市nnn(亚特兰大)。每个航班的价格按周期变化(周期长度ddd1≤d≤301 \le d \le 301d30),价格为000表示当天无航班。求最小总花费,若无解输出No flight possible.

输入格式

输入包含多个场景。每个场景第一行两个整数nnn2≤n≤102 \le n \le 102n10)和kkk1≤k≤10001 \le k \le 10001k1000)。接下来n(n−1)n(n-1)n(n1)行,每行描述一对城市之间的航班价格。第111n−1n-1n1行是从城市1112,3,…,n2,3,\ldots,n2,3,,n的航班;第nnn2n−22n-22n2行是从城市2221,3,4,…,n1,3,4,\ldots,n1,3,4,,n,以此类推。每个航班描述以整数ddd开头,后跟ddd个整数表示每天的价格。输入以n=k=0n = k = 0n=k=0结束。

输出格式

对于每个场景,输出Scenario #X,然后输出The best flight costs x.No flight possible.,每个场景后跟一个空行。

样例

输入

3 6 2 130 150 3 75 0 80 7 120 110 0 100 110 120 0 4 60 70 60 50 3 0 135 140 2 70 80 2 3 2 0 70 1 80 0 0

输出

Scenario #1 The best flight costs 460. Scenario #2 No flight possible.

题目分析

本题的核心是动态规划。

动态规划定义

cost[d][c]\textit{cost}[d][c]cost[d][c]表示第ddd天到达城市ccc的最小花费。初始cost[1][c]=\textit{cost}[1][c] =cost[1][c]=航班价格(若存在)。转移:
cost[d][c]=min⁡p≠c{cost[d−1][p]+price(p→c,d)} \textit{cost}[d][c] = \min_{p \ne c} \{ \textit{cost}[d-1][p] + \text{price}(p \to c, d) \}cost[d][c]=p=cmin{cost[d1][p]+price(pc,d)}
其中price(p→c,d)\textit{price}(p \to c, d)price(pc,d)为第ddd天从pppccc的航班价格(若为000则不可用)。

复杂度分析

k≤1000k \le 1000k1000n≤10n \le 10n10,时间复杂度O(k×n2)O(k \times n^2)O(k×n2)

代码实现

// Always on the Run// UVa ID: 590// Verdict: Accepted// Submission Date: 2016-09-26// UVa Run Time: 0.000s//// 版权所有(C)2016,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;intmain(){cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);vector<vector<int>>schedule[12];intcost[1100][12];intn,k,cases=0;while(cin>>n>>k,n){for(inti=1;i<=n;i++)schedule[i].clear();inttotal=n*(n-1),count;for(inti=1;i<=n;i++){schedule[i].push_back(vector<int>(1,0));for(intj=1;j<=n;j++){if(i==j){schedule[i].push_back(vector<int>(1,0));continue;}cin>>count;vector<int>lines(count);for(intl=0;l<count;l++)cin>>lines[l];schedule[i].push_back(lines);}}memset(cost,0,sizeof(cost));for(inti=1;i<=n;i++)cost[1][i]=schedule[1][i][0];for(inti=2;i<=k;i++){for(intj=1;j<=n;j++){for(intl=1;l<=n;l++){if(l==j)continue;intfee=schedule[j][l][(i-1)%schedule[j][l].size()];if(fee==0||cost[i-1][j]==0)continue;if(cost[i][l]==0)cost[i][l]=cost[i-1][j]+fee;elsecost[i][l]=min(cost[i][l],cost[i-1][j]+fee);}}}cout<<"Scenario #"<<++cases<<'\n';if(cost[k][n]>0)cout<<"The best flight costs "<<cost[k][n]<<".\n\n";elsecout<<"No flight possible.\n\n";}return0;}
http://www.jsqmd.com/news/1078019/

相关文章:

  • Z-Image中文轻量文生图模型:4060 Ti本地3秒出图实战指南
  • Kotlin的@JvmStatic与@JvmField:与Java互操作的注解
  • 智能体成本优化实战:从推理到基础设施的四大降本策略
  • AI技术动态如何转化为可执行决策?Newsletter信息过滤方法论
  • 042、多态与鸭子类型:Python 的接口哲学与 Protocol 类型检查
  • 企业安全实战:中间件漏洞攻防与纵深防御体系建设
  • 为什么你的VMware Java环境总报NoClassDefFoundError?——资深工程师逆向排查的7层依赖链真相
  • YOLO-Master 源码 Ultralytics 全局 cfg.yaml 参数逐段详解
  • 猫抓浏览器扩展终极指南:5大核心功能助你轻松捕获网络资源
  • 深入解析musl libc中的mmap实现源码
  • 计算机毕业设计之基于Java的流浪动物收养系统设计与开发
  • 短视频 游戏 直播 联机一切 只要有用户 有用户用 带货才好卖
  • Python asyncio深度实战:从原理到生产级异步HTTP客户端
  • FFmpegGUI:三步告别复杂命令行,开启高效视频处理新时代
  • 如何用Buzz离线语音转文字工具彻底解放你的音频处理工作流?
  • AI 创业的五个致命假设:从技术幻觉到商业现实的跨越
  • 物联网边缘安全:基于NXP A71CH安全元件的硬件信任根实践
  • 技术线上面试代码写完就以为通关?留学生利用黑盒测试自证风控「蒸汽教育分享」
  • Windows 11终极优化指南:3步彻底清理系统臃肿与隐私问题
  • STM32-S218-土壤湿度+水泵+温湿度+光照+光补+上下限+加热+空调降温+加湿+除湿+手动+自动+OLED屏+声光报警+按键+(无线方式选择)-1(设计源文件+万字报告+讲解)(支持资料、图片
  • Windows 11终极清理指南:3步免费移除系统臃肿
  • 从传统客户端到云端革命:如何用Roundcube Mail打造你的专属Web邮箱系统
  • AI 驱动下 GEO 与 SEO 融合实战指南
  • 【MATLAB代码(车联网5)】基于网联车辆实时感知的单交叉口全感应自适应信号控制仿真系统——FA-CV方法与传统控制策略的性能对比研究
  • LangGraph动态执行:用有向图重构AI对话系统
  • 暗黑2存档编辑器终极指南:5分钟快速掌握d2s-editor完整使用教程
  • 为什么说必火AI不是培训机构,而是AI增长系统公司?
  • ThinkPad F1、F4 按键常亮外放无声?重装热键驱动没用,一招修复
  • AI 驱动的设计系统治理:从 Figma Token 到代码约束的自动化同步
  • Kaggle Expert Rank前5个Notebook质量提升实战指南