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

IAR链接器配置文件(.icf)实战指南:从内存映射到代码布局 本文深入解析了IAR链接器配置文件(.icf)的核心作用与实战配置方法。作为嵌入式开发的“内存地图”,.icf文件精确控制代码与数据在Flash和RAM中的布局。文章从定义存储空间、划分区域、预留栈堆,到精确放置中断向量表、代码段及初始化控制,提供了完整的配置指南与避坑技巧,帮助开发者优化内存使用,解决链接错误,是掌握嵌入式系统底层内存管理的关键。 阅读详情

/*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;
}

 

手机开发实战58——小区广播介绍2 业务 针对小区广播短消息的特点,可以提供一些基于目前短消息不能或不适合提供的服务: 1. 显示网络服务基站名称:用户可以随时了解手机登记在哪个基站下,特别是在边界交叉覆盖区域,用户可以清楚的知道通话建立在哪个基站下,在用户投诉和故障描述中也会有所帮助; 2. 提供用户问候信息:可以在覆盖机场、车站等地区的基站广播一些用户问候语或一些企业形象广告语; 3. 充分利用小区广播地 阅读详情

相关推荐

AD9026芯片开发实战指南:从硬件配置到射频校准

本文为AD9026芯片开发实战指南,详细解析了从硬件设计、电源时钟配置、SPI初始化到多芯片同步与JESD204高速链路建立的完整流程。重点探讨了射频校准技术,包括初始化校准与跟踪校准,以保障5G、MIMO等现代通信系统所需的射频性能。旨在帮助开发者系统掌握这颗高性能射频收发器的应用,规避常见设计陷阱。

tomato的博客 851

★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

手把手教你用ObjectCRX进行Caxa二次开发:从零开始的环境搭建教程

本文是一份面向零基础初学者的Caxa二次开发实战指南,重点讲解如何使用ObjectCRX框架从零开始搭建开发环境。内容涵盖Visual Studio 2015版本锁定、ObjectCRX向导集成、项目创建、典型错误解决,并最终实现一个可在Caxa中运行的HelloWorld程序,帮助开发者快速入门并避开常见陷阱。

w3x4y的博客 513

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

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

ccnuacmhdu的博客 271

Code Ocean 上传代码 手把手教程

对于一些学术期刊,录用前会让把代码上传到Code Ocean上,但上传过程可能会遇到一些问题,小编分享一下自己的上传经验。他们会进行验证,验证通过,将自动发布。点此运行即可,但是运行比较慢。

u014071947的博客 1万+

深入解析PCIe Retimer:工作原理与典型应用场景

本文深入解析了PCIe Retimer的工作原理与核心价值。作为高速信号的中继再生器,Retimer通过时钟数据恢复和信号再生技术,有效解决长距离或复杂通道中的信号衰减与完整性问题,从而极大地扩展了PCIe链路的有效传输距离。文章详细阐述了其内部架构、自动与手动两种工作模式,并重点介绍了在长距离板间互连、复杂背板设计等典型应用场景中的关键作用。

weixin_29195615的博客 508

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

景区导览系统|景区展馆智能导览|小程序导览|电子导览手绘地图制作

AI 数字导游就像一位随时陪伴在游客身边的专属导游,能够根据游客的提问,迅速、准确地提供详细的景点介绍、历史文化知识讲解,甚至能根据游客的兴趣爱好和实时位置,为其智能规划个性化的游览路线。在手绘地图中可以显示景区中的景点信息、景点和景点之间的路径,也可以显示景区的关键地点信息:景区全景、植物景观、河流、道路、地形面貌、卫生间等公共设施~无论是景区还是展馆,道可云AI智能导览系统都能通过丰富的功能、先进的技术,为游客打造便捷、智能、个性化的游览体验,成为文旅行业数字化转型的得力助手。

道可云 1147

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

WblockCloneObjects克隆一个图纸内的实体包括块参照,同名块参照的处理

public static void HeBingTu2(double lieJu, List<string> filePaths) { Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; using (DocumentLock docLock = doc.Lock...

1108

遥感影像建筑物变化检测

遥感影像建筑物变化检测

yilvyangguang520的博客 423

紫书第九章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

【推荐100个unity插件】将UE的资源导出到unity使用—— Exporter for Unreal to/for Unity插件

Unreal to Unity导出器是一款帮助开发者将Unreal Engine项目转换为Unity的工具。文章详细介绍了使用步骤:1)安装虚幻引擎并创建项目;2)在Plugins文件夹中安装导出插件;3)导入UE资产到Content文件夹;4)配置导出参数并完成转换。文末推荐了多个Unity开发专栏,涵盖C#编程、2D/3D开发、特效制作等内容。作者向宇提供了博客地址,欢迎读者交流学习。该工具能有效提升项目迁移效率,适合需要跨引擎开发的用户使用。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 853

紫书第九章-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

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

第四十六题 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

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

算法竞赛入门经典第九章

第九章 动态规划初步 学习目标: 理解状态和状态转移方程 理解最优子结构和重叠子问题 熟练运用递推法和记忆化搜索求解数字三角形问题 熟悉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、付费专栏及课程。

余额充值