第九章例题-A A Spy in the Metro

Visual studio 2013 配置 Halcon 13 (非抄袭) Visual studio 2013 配置 Halcon 13.0.2.2 (其他版本适用) 针对网上抄袭的配置方法均不可用,写了一篇亲试可行的配制方法。如下: 1.下载Halcon安装后(C:\Program Files\MVTec\HALCON-13.0) 添加环境变量,(按下win按键,键入“环境变量”,出现 “编辑系统环境变量”后按下enter即可打开,下方找到“环境变量”按钮)的系... 阅读详情

/*SE:wn------王宁*/

先贴出刘汝佳大神的源码:只有在开头有改动,因为他的遇到0不能正常结束。

然后是贴出自己的源码和注释,注释很长,挑能看懂的看,有一些是解读,有一些是产生脑洞后的思考。

还没ac的看解读就行了,ac的不妨也看一下我的困惑和思考过程欢迎批评与指正。

大神源码在此,boom~:

// UVa1025 A Spy in the Metro
// Rujia Liu
#include<iostream>
#include<cstring>
using namespace std;

const int maxn = 50 + 5;
const int maxt = 200 + 5;
const int INF = 1000000000;


int t[maxn], has_train[maxt][maxn][2];
int dp[maxt][maxn];

int main() {
  int kase = 0, n, T;
  while(cin >> n  && n) {
  	cin >> T;
    int M1, M2, d;
    for(int i = 1; i <= n-1; i++) cin >> t[i];

  
    memset(has_train, 0, sizeof(has_train));
    cin >> M1;
    while(M1--) {
      cin >> d;
      for(int j = 1; j <= n-1; j++) {
        if(d <= T) has_train[d][j][0] = 1;
        d += t[j];
      }
    }
    cin >> M2;
    while(M2--) {
      cin >> d;
      for(int j = n-1; j >= 1; j--) {
        if(d <= T) has_train[d][j+1][1] = 1;
        d += t[j];
      }
    }

   
    for(int i = 1; i <= n-1; i++) dp[T][i] = INF;
    dp[T][n] = 0;

    for(int i = T-1; i >= 0; i--)
      for(int j = 1; j <= n; j++) {
        dp[i][j] = dp[i+1][j] + 1; 
        if(j < n && has_train[i][j][0] && i+t[j] <= T)
          dp[i][j] = min(dp[i][j], dp[i+t[j]][j+1]); 
        if(j > 1 && has_train[i][j][1] && i+t[j-1] <= T)
          dp[i][j] = min(dp[i][j], dp[i+t[j-1]][j-1]); 
      }

    
    cout << "Case Number " << ++kase << ": ";
    if(dp[0][1] >= INF) cout << "impossible\n";
    else cout << dp[0][1] << "\n";
  }
  return 0;
}

 

本人源码在此,boom~:

#include<bits/stdc++.h>
using namespace std;
const int maxn=55;
const int maxt=205;
//跳转的是时间(单项跳转,所以以maxt作为第一关键字)
int dp[maxt][maxn];
const int INF=1000000000; 
int N,T,M1,M2;
int t[maxn];
int d[maxn];
int e[maxn];
int has_train[maxt][maxn][3];
int kase;
int main()
{
	int i,j;
	kase=0;
	while(~scanf("%d",&N)&&N)
	{
		memset(has_train,0,sizeof(has_train));
		scanf("%d",&T);
		for(i=1;i<=N-1;i++) scanf("%d",&t[i]);
		scanf("%d",&M1);
		for(i=1;i<=M1;i++)
		{
			scanf("%d",&d[i]);
			int dd=d[i];
			has_train[dd][1][1]=1;
			for(j=2;j<N;j++)
			{
				dd+=t[j-1];
				if(dd<=T)
				has_train[dd][j][1]=1;
			}
		}
		scanf("%d",&M2);
		for(i=1;i<=M2;i++)
		{
			scanf("%d",&e[i]);
			int dd=e[i];
			has_train[dd][N][0]=1;
			for(j=N-1;j>1;j--)
			{
				dd+=t[j];
				if(dd<=T)
				has_train[dd][j][0]=1;
			}
		}
		/*要注意流逝的时间——序,和等待的时间dp--值是不一样的*/
    	/*1-(n-1)个车站如果到了T——规定时间,都算完不成任务,所以置为INF*/
		for(i=1;i<=N-1;i++) dp[T][i]=INF;
		/*只有刚好在终点站n才算完成任务,……为什么初始化为0?因为如果T时刻已经
		在终点站n了,那么接下来就不用再走了*/ 
		dp[T][N]=0;


		/*那么为什么剩下的被默认地置为0了呢,难道说其他的车站不在T时刻也不用动了吗?
		我们注意到下面这个循环,每次对dp的初始化是不是如果不动,将会把它置为后一秒需要等待的
		时间+1?如果后一秒无法到达,它也会被置为INF*/
		/*唯一的转机在于这一秒往前或者往后的车,最简单的情况就是i+t[j]==T
		然后j+1等于n这时候是刚好也被赋值为0的,很好想象,你坐车过了几秒然后下车就是目的地
		当然没有在车站等车的时间*/
		/*这样有了中间点——值不等于INF的点(如果需要的话),
		对于if前面的那一行初始化语句,它的邻近的点就能通过到他这里来避免初始化为INF的命运了
		因为都是要花时间的,所以先确定后面的状况可以帮助前面的时间来动态规划,至于能不能到
		这个状态就要看你能不能在你自己那个状态(时间点)上车了*/
		
		/*分割线--------ac之前的理解 vs ac之后的细节思考----------分割线*/ 
		
		/*假如我能在这个时刻在这个车站,我能通过等待||坐去往右边的车||坐去往左边的车来确定我还要等待的时间
		因为能够唯一确定的是dp[T][N]=0 所以应该从后面开始动态规划(第一个for循环)*/
		/*对于第二个for呢,从后往前行不行呢?j是车站啊,车站N不是知道了dp[T][N]=0吗?前面的车站不就可以根据后一个车站来更新值了吗?
		不在这次更新*/
		/*我注意到i是固定的(对于第二重循环来说),i固定,就意味着
		能够利用来更新的值,都是已经一轮(i循环)之前就弄好了的,所以j是没必要更换顺序的*/ 
		for(i=T-1;i>=0;i--)
			for(j=1;j<=N;j++)
			{
				dp[i][j]=dp[i+1][j]+1;
				if(i+t[j]<=T&&j+1<=N&&has_train[i][j][1])
					dp[i][j]=min(dp[i][j],dp[i+t[j]][j+1]);
				if(i+t[j-1]<=T&&j-1>=1&&has_train[i][j][0])
					dp[i][j]=min(dp[i][j],dp[i+t[j-1]][j-1]);
			}
		++kase;
		if(dp[0][1]<INF)
		printf("Case Number %d: %d\n",kase,dp[0][1]);
		else
		printf("Case Number %d: impossible\n",kase);
	}
	return 0;
}

 

数据挖掘实战-基于长短期记忆网络(LSTM)的黄金价格预测模型 | 97% 准确度 本实验基于Kaggle上提供的从2013年到2023年的黄金价格数据集,运用长短期记忆网络(LSTM)构建了黄金价格预测模型。该数据集详细记录了每日的黄金价格信息,包括开盘价、收盘价、高点、低点和交易量等,为模型的训练提供了丰富的数据支持。 阅读详情

相关推荐

保姆级教程:用Protege 5.5.0从零构建你的第一个知识图谱(附实战案例文件)

本文提供了一份详细的Protege 5.5.0使用指南,从零开始构建知识图谱。通过'中国古代文人关系网'实战案例,涵盖软件安装、本体创建、属性定义、实例填充到高级功能应用的全流程,帮助初学者快速掌握知识建模的核心技能。

weixin_26808205的博客 234

★UVa 1025---A Spy in the Metro 题解 (简单dp)

https://vjudge.net/problem/UVA-1025 题意:一个间谍要从第一个车站到第n个车站去会见另一个,在是期间有n个车站,有来回的车站,让你恰好在时间T到达n,并且等车时间最短,输出最短等车时间。 思路:先用一个L[][]来表示在t时刻,在车站i,是否有往右开的车。同理,R[][]用来保存是否有往左开的车。          用d(i,j)表示时刻i,你在

K键盘里的青春K 1373

PCB模块化设计24——DCDC电源模块PCB布局布线设计规范

PCB模块化设计24——DCDC电源模块PCB布局布线设计规范

qq_31444421的博客 2万+

紫书第九章-----动态规划初步(例题9-1 A Spy in the Metro UVA - 1025 )

A Spy in the Metro UVA - 1025 本文参考刘汝佳《算法竞赛入门经典》(第2版) * 动态规划的核心是状态和状态转移方程* /* 【理解题意】 注意本题要求的是最短的等待时间!就是在各个车站等待的时间之和的最小值! 建议通过输入输出样例来更好的明白题意!要尽量多在车上待着,减少在车站等 的时间,这样安全乎!并且要保证在T时刻(约会时间)到达终点...

ccnuacmhdu的博客 271

【踩坑记录】Latex引文bib报错

VScode+Texlive+Zotero本地论文写作环境踩坑。解决Zotero导出bib文件后tex中通过cite引用时所产生的问题。

weixin_43319948的博客 2823

硬件电路(22)-TTL和232切换电路

工作中会遇到TTL和232电平的通信的状态,为了实现一种便捷的切换方式,参考了一些文章,提供一种电路方便大家使用。

剑藏锋的博客 1865

UVA 1025 A Spy in the Metro - ACM/ICPC World Finals 2003

#include&lt;bits/stdc++.h&gt; using namespace std; int n,m,T,t,i,j,k,a[310],train1[310][310],train2[310][310],dp[310][310]; int main(){ while(scanf("%d",&amp;n)&amp;&amp;n){ k++; scanf("%d",&amp;...

Napoleon2004的博客 245

《C++面向对象程序设计》✍千处细节、万字总结(建议收藏)

《C++面向对象程序设计》✍千处细节、万字总结 文章目录《C++面向对象程序设计》✍千处细节、万字总结一、面向对象程序设计二、C++基础2.1 C++的产生和特点2.2 一个简单的C++示例程序2.3 C++在非面向对象方面对C语言的扩充输入和输出cinconst修饰符void型指针内联函数带有默认参数值的函数函数重载作用域标识符"::"强制类型转换new和delete运算符引用三、类和对象(一)3.1 类的构成3.2 成员函数的定义3.3 对象的定义和使用3.4 构造函数与析构函数构造函数成员初始化列表

像写诗一样优雅地写代码~ 78万+

A Spy in the Metro (dp)

A Spy in the Metro   Secret agent Maria was sent to Algorithms City to carry out an especially dangerous mission. After several thrilling events we find her in the first station of Algorithms City M...

FIVE 359

【数据集】中国陆地生态系统通量观测网 ChinaFLUX

【数据集】中国陆地生态系统通量观测网 ChinaFLUX

WW、forever的博客 193

Microsemi Libero系列教程(二)——新建点灯工程

前言 上一篇文章,介绍了Microsemi Libero系列教程(一)-Libero开发环境介绍,下载,安装与注册,作为嵌入式开发中的Hello World,点灯是再也基础不过的实验了,通过点灯实验,可以了解芯片GPIO的控制和开发环境IDE新建工程的流程,对于FPGA来说,每个IO口几乎一样,所以本篇文章主要学习一下如何基于Microsemi Libero集成开发环境建立一个示例工程,让一个L...

whik1194的博客 1万+

紫书第九章A - A Spy in the Metro

A - A Spy in the Metro 题目:点击打开链接 参考自点击打开链接 /* *dp[i][j]表示时刻i,在车站j,最少还需要等待多长时间 *has_train[t][i][0]表示时刻t,在车站i是否有向右开的火车 *has_train[t][i][1]表示时刻t,在车站i是否有向左开的火车 */ #include #includ

Action_now的博客 482

2026年紫光同创数字IC笔试试卷带答案

FPGA基础知识与设计要点摘要 本文围绕FPGA与数字IC设计核心概念,通过单选题、波形分析题、多选题和简答题形式,系统梳理了以下关键知识点: FPGA基础架构 查找表(LUT)是实现组合逻辑的基本单元(题1) CLB包含LUT、触发器和进位链,后者加速算术运算(题6,10) 布局布线优化是减少关键路径延迟的核心方法(题7) 时序分析要点 建立时间(时钟沿前数据需稳定)与保持时间(时钟沿后需保持)的定义(题2,简答1) 亚稳态成因及两级同步器处理跨时钟域信号的方法(多选题1,波形题5) 特殊设计技术 异步复

Open 114

紫书第九章-A - A Spy in the Metro

A - A Spy in the Metro 点击打开链接 参考自https://www.cnblogs.com/zzy19961112/p/5877436.html#undefined /* *dp[i][j]表示时刻i,在车站j,最少还需要等待多长时间 *has_train[t][i][0]表示时刻t,在车站i是否有向右开的火车 *has_train[t]

Action_now的博客 338

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

第四十六题 UVA1025 城市里的间谍 A Spy in the Metro

Secret agent Maria was sent to Algorithms City to carry out an especially dangerous mission. After several thrilling events we find her in the first station of Algorithms City Metro, examining the tim...

苦鬼·。 248

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

A Spy in the Metro UVA - 1025(紫薯第九章)

点击打开链接 时间是单向流逝的,是一个天然的序,每一个时间有三个选择: 1.等一分钟 2.搭上向左开的车(如果有) 3.搭上向右开的车(如果有) #include using namespace std; typedef long long LL; typedef unsigned long long ULL; typedef pair pii; const int INF=0x3f3f

Draven__的博客 453

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

算法竞赛入门经典第九章

第九章 动态规划初步 学习目标: 理解状态和状态转移方程 理解最优子结构和重叠子问题 熟练运用递推法和记忆化搜索求解数字三角形问题 熟悉DAG上动态规划的常见思路、两种状态定义方法和刷表法 熟悉记忆化搜索和递推中输出方案的方法 掌握递推中滚动数组的使用方法 熟练解决经典动态规划问题 动态规划的理论性和实践性都比较强,一方面需要理解“状态”,“状态转移”、“最优子结构"、”重叠子问...

Stormjing的博客 226

UVA 1025 "A Spy in the Metro " (DAG上的动态规划?? or 背包问题??)

传送门 参考资料:   [1]:算法竞赛入门经典:第九章 DAG上的动态规划 题意:   Algorithm城市的地铁有 n 个站台,编号为 1~n,共有 M1+M2 辆列车驶过;   其中 M1 辆列车从 1 号站台驶向 n 号站台,M2 辆列车从 n 号站台驶向 1 号地铁;   (单程线,M1 辆列车到达 n 号站台后不会回返,同理 M2)   特工Maria 要在 T...

weixin_30548917的博客 135

P315 GCD等于XOR UVa12176 “不难发现”的解释 以及完整推导过程

1. a-b&lt;=a xor b, 对于在同一个数位相同的二进制位值,xor和减法的效果都是一样的。 对于在同一个数位不同的二进制位值,xor恒等于1,而减法可能向高位借1. 2.gcd(a,b)&lt;=a-b (假设a&gt;b) 因为gcd(a,b)=gcd(b,a%b) 设a=qb+r  r=a%b=a-qb gcd(b,a%b)=gcd(b,a-qb) 此时最大公因数不...

JXUFE_ACMer的博客 381

第八章习题 E - Paper Folding

/*SE:wn------王宁*/ /*这一题我是按照这位 https://blog.youkuaiyun.com/weizhuwyzc000/article/details/47038989 的方式写的,我主要讲一下自己实现的注意点和一些体会*/ /*首先是题意的理解:自己去折纸只提示一点,最底下那“张”永远是最小单位的纸张区域 然后关于规律和路线思想的提出,请看原网站。 详解路线:知道路线之后从当前位置...

JXUFE_ACMer的博客 349

第十章例题 A - Colossal Fibonacci Numbers! UVA - 11582

/* SE:wn------王宁 1.f数组的值显然是不重复的,因为是递增数列 2.但是它每个元素都%n,必定是有重复的规律,否则里面a^b那么大怎么找对应的? 刘汝佳大神说因为余数最多n中,所以最多n*n项就会出现重复我不理解 3.所以找出重复的次数,到时候里面的 a^b 取余再到存放的数组里面去找就行了 4.关于a和b我一开始以为他们太大存不下,然而用unsigned long long ...

JXUFE_ACMer的博客 347

第九章例题 E - Jin Ge Jin Qu hao

/*SE:wn------王宁*/ 这道背包思路一点都不难想,大致实现也不难写。 最难的是什么?是在边界值的初始化和特殊情况的处理。 So, let's solve it!   /*SE:wn------王宁*/ #include&lt;bits/stdc++.h&gt; using namespace std; /* dp[i][j]是说前i首歌在时刻j所能完成的歌的数目 一. 初始化...

JXUFE_ACMer的博客 341

第十一章例题 UVa753 A Plug for UNIX

       “完全不知,往日为何,能与我……” 好吧我想说完全不知道为什么我觉得这几天对图论的学习都很有意思,学起来又酷又炫的~ 刘汝佳大神的源码我会放在后面。 /*SE:wn------王宁*/ /*回过头去学二分图匹配的匈牙利算法,才发现原来这一题就是二分图匹配啊 关键的一点就是这个转换器是给带插头的设备使用的 有点,有边——int n,m; 要知道和点连接的边——void add...

JXUFE_ACMer的博客 330

第八章例题 UVa11134 Fabled Rooks

/*SE:wn------王宁*/ 首先是对行列不相关的理解,只要行列都各自满足不相关即可——好像和没说一样,但是如果不能理解这个也不能理解剩下的做法,一定要先想清楚的确可以用一维的方法解题。 接下来是对那个solve函数的for循环解读——贪心思想,然后是做这道题目遇到的bug以及修复方法 解读——贪心思想 /* 1. 未被使用过 2. 能在前端满足包含条件  3. 后端要尽可能靠近当前...

JXUFE_ACMer的博客 328

第十一章例题 uva 1151 C- Buy or Build

自己用dfs实现枚举 + 对刘汝佳大神用二进制枚举的解读  /*SE:wn------王宁*/ /*Buy or Build 输入输出解读 输入: 城市编号从1-n 1.告诉你有几个case 2.1 n of cities in the country (1 ≤ n ≤ 1000) 2.2 followed by the number q of existing subnetworks ...

JXUFE_ACMer的博客 327

第九章例题 D- Unidirectional TSP

/*SE:wn------王宁*/ 这是一道简单的多阶段决策题目,但是要注意细节处理。 #include&lt;bits/stdc++.h&gt; using namespace std; const int maxr=15; const int maxc=105; int mat[maxr][maxc]; int d[maxr][maxc]; int path[maxc]; int mai...

JXUFE_ACMer的博客 318
上一篇: 紫书P263 嵌套矩形如何输出所有路径(DAG上的动态规划)代码与解读
下一篇: 第九章例题 D- Unidirectional TSP
JXUFE_ACMer
博客等级 码龄9年 20粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值