动规专项3.docx

上传人:b****6 文档编号:6832708 上传时间:2023-01-11 格式:DOCX 页数:17 大小:35.17KB
下载 相关 举报
动规专项3.docx_第1页
第1页 / 共17页
动规专项3.docx_第2页
第2页 / 共17页
动规专项3.docx_第3页
第3页 / 共17页
动规专项3.docx_第4页
第4页 / 共17页
动规专项3.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

动规专项3.docx

《动规专项3.docx》由会员分享,可在线阅读,更多相关《动规专项3.docx(17页珍藏版)》请在冰豆网上搜索。

动规专项3.docx

动规专项3

专题训练题3

1相似基因(Gene)

【问题描述】

大家都知道,基因可以看作一个碱基对序列。

它包含了4种核苷酸,简记作A,C,G,T。

生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物。

在一个人类基因工作组的任务中,生物学家研究的是:

两个基因的相似程度。

因为这个研究对疾病的治疗有着非同寻常的作用。

两个基因的相似度的计算方法如下:

对于两个已知基因,例如AGTGATG和GTTAG,将它们的碱基互相对应。

当然,中间可以加入一些空碱基-,例如:

A

G

T

G

A

T

-

G

-

G

T

-

-

T

A

G

这样,两个基因之间的相似度就可以用碱基之间相似度的总和来描述,碱基之间的相似度如下表所示:

A

C

G

T

-

A

5

-1

-2

-1

-3

C

-1

5

-3

-2

-4

G

-2

-3

5

-2

-2

T

-1

-2

-2

5

-1

-

-3

-4

-2

-1

*

那么相似度就是:

(-3)+5+5+(-2)+(-3)+5+(-3)+5=9。

因为两个基因的对应方法不唯一,例如又有:

A

G

T

G

A

T

G

-

G

T

T

A

-

G

相似度为:

(-3)+5+5+(-2)+5+(-1)+5=14。

规定两个基因的相似度为所有对应方法中,相似度最大的那个。

【输入文件】

共两行。

每行首先是一个整数,表示基因的长度;隔一个空格后是一个基因序列,序列中只含A,C,G,T四个字母。

1<=序列的长度<=100。

【输出文件】

仅一行,即输入基因的相似度。

【输入输出样例】

输入:

7AGTGATG

5GTTAG

输出:

14

2积木城堡(Castle)

【问题描述】

XC的儿子小XC最喜欢玩的游戏用积木垒漂亮的城堡。

城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木。

小XC是一个比他爸爸XC还聪明的孩子,他发现垒城堡的时候,如果下面的积木比上面的积木大,那么城堡便不容易倒。

所以他在垒城堡的时候总是遵循这样的规则。

小XC想把自己垒的城堡送给幼儿园里漂亮的女孩子们,这样可以增加他的好感度。

为了公平起见,他决定把送给每个女孩子一样高的城堡,这样可以避免女孩子们为了获得更漂亮的城堡而引起争执。

可是他发现自己在垒城堡的时候并没有预先考虑到这一点。

所以他现在要改造城堡。

由于他没有多余的积木了,他灵机一动,想出了一个巧妙的改造方案。

他决定从每一个城堡中挪去一些积木,使得最终每座城堡都一样高。

为了使他的城堡更雄伟,他觉得应该使最后的城堡都尽可能的高。

请你帮助小XC编一个程序,根据他垒的所有城堡的信息,决定应该移去哪些积木才能获得最佳的效果。

【输入文件】

第一行是一个整数N(N<=100),表示一共有几座城堡。

以下N行每行是一系列非负整数,用一个空格分隔,按从下往上的顺序依次给出一座城堡中所有积木的棱长。

用-1结束。

一座城堡中的积木不超过100块,每块积木的棱长不超过100。

【输出文件】

一个整数,表示最后城堡的最大可能的高度。

如果找不到合适的方案,则输出0。

【输入输出样例】

输入:

2

21-1

321-1

输出:

3

3筷子(Chop)

【问题描述】

A先生有很多双筷子。

确切的说应该是很多根,因为筷子的长度不一,很难判断出哪两根是一双的。

这天,A先生家里来了K个客人,A先生留下他们吃晚饭。

加上A先生,A夫人和他们的孩子小A,共K+3个人。

每人需要用一双筷子。

A先生只好清理了一下筷子,共N根,长度为T1,T2,T3,……,TN。

现在他想用这些筷子组合成K+3双,使每双的筷子长度差的平方和最小。

(怎么不是和最小?

这要去问A先生了,呵呵)

【输入文件】

输入文件共有两行,第一行为两个用空格隔开的整数,表示N,K(1≤N≤100,0

【输出文件】

输出文件仅一行。

如果凑不齐K+3双,输出-1,否则输出长度差平方和的最小值。

【输入输出样例】

输入:

101

112333461020

输入:

5

说明:

第一双11

第二双23

第三双33

第四双46

(1-1)^2+(2-3)^2+(3-3)^2+(4-6)^2=5

4对话(Dialog)

【问题描述】

从前有两个人,一个名为“one”,另一个则叫“puton”。

很奇怪,“one”除了称呼“puton”名字外,只对他说“out”和“output”两个单词;“puton”除了称呼“one”名字外,只对他说“in”和“input”两个单词。

最近人们在研究他们对话,但是,由于资料的混乱,其中可能有一些不是他们的对话。

你的任务是鉴别一些句子,判断这些句子是否可能是他们的对话。

(即,判断句子是否可以被划分成若干单词,这些单词只可以是“one”、“puton”、“out”、“output”、“in”和“input”)。

输入n个字符串,长度不超过200,表示一句句子。

如果可能是那两个人的对话,则输出“YES”;否则,输出“NO”。

【输入文件】

第一行一个整数n,表示一共有n句句子。

此后每行一个字符串,表示一句句子。

【输出文件】

n行,每行一个“YES”或“NO”,表示你的判断结果。

【输入输出样例】

输入:

6

puton

inonputin

oneputonininputoutoutput

oneininputwooutoutput

outpu

utput

输出:

YES

NO

YES

NO

NO

NO

5DOLLARS

【问题描述】

在以后的若干天里戴维将学习美元与德国马克的汇率。

编写程序帮助戴维何时应买或卖马克或美元,使他从100美元开始,最后能获得最高可能的价值。

【输入文件】

输入文件的第一行是一个自然数N,1≤N≤100,表示戴维学习汇率的天数。

接下来的N行中每行是一个自然数A,1≤A≤1000。

第i+1行的A表示预先知道的第i+1天的平均汇率,在这一天中,戴维既能用100美元买A马克也能用A马克购买100美元。

【输出文件】

输出文件的第一行也是唯一的一行应输出要求的钱数(单位为美元,保留两位小数)。

注意:

考虑到实数算术运算中进位的误差,结果在正确结果0.05美元范围内的被认为是正确的,戴维必须在最后一天结束之前将他的钱都换成美元。

【输入输出样例】

输入:

5

400

300

500

300

250

输入:

266.66

样例解释:

(无需输出)

Day1...changing100.0000美元=400.0000马克

Day2...changing400.0000马克=133.3333美元

Day3...changing133.3333美元=666.6666马克

Day5...changing666.6666马克=266.6666美元

6递增序列(Incsq)

【问题描述】

给定一个数字串,请你插入若干个逗号,使得该数字串成为一个严格递增的数列且最后一个数要尽可能小,在这个问题中,前导的零是允许出现在数的前面的。

【输入文件】

输入数据仅含一行,为一个长度不超过80的数字串。

【输出文件】

输出一个严格递增且最后一数最小的数列,相邻两个数之间用一个逗号隔开,如果有多个数列满足要求,则输出第一个数最大的那个数列,若这样的解还不止一个,则输出第二个数最大的那个数列,以此类推。

【输入输出样例】

输入:

100000101

输出:

100,000101

7奇怪的电梯(Lift)

【问题描述】

呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯。

大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N)。

电梯只有四个按钮:

开,关,上,下。

上下的层数等于当前楼层上的那个数字。

当然,如果不能满足要求,相应的按钮就会失灵。

例如:

33125代表了Ki(K1=3,K2=3,……),从一楼开始。

在一楼,按“上”可以到4楼,按“下”是不起作用的,因为没有-2楼。

那么,从A楼到B楼至少要按几次按钮呢?

【输入文件】

输入文件共有二行,第一行为三个用空格隔开的正整数,表示N,A,B(1≤N≤200,1≤A,B≤N),第二行为N个用空格隔开的正整数,表示Ki。

【输出文件】

输出文件仅一行,即最少按键次数,若无法到达,则输出-1。

【输入输出样例】

输入:

515

33125

输出:

3

8!

乘电梯(Lifts)!

【问题描述】

你拼命地工作到半夜,该回家了。

你的办公室在摩天大楼的顶层。

大楼有电梯系统。

每部电梯工作的楼层是不一样的。

每个电梯匀速运动,每上下一层的时间都是一个单位。

现在你是大楼里唯一使用电梯的人。

电梯随机地停在任意一个可能的位置。

按下按钮,等一会儿电梯就会到了。

显然电梯到的快慢取决于你在哪一层楼。

你在某电梯服务范围的最高层会比在中间的时候等待更长的时间。

更精确地,如果你的上面有a层楼,你的下面有b层楼,那么预计的等待时间将是:

 

你得写一个程序,计算下楼的最短时间。

假设进出电梯和换电梯都不需要时间。

【输入文件】

第一行是电梯的数量和大楼层数。

然后每行是一个电梯服务的最低层和最高层。

最多有200个电梯,大楼不超过10000层。

显然问题是有解的。

不然你是怎么上去的呢?

【输出文件】

最短时间。

精确到5位小数。

【输入输出样例】

输入:

615

48

1014

15

711

1315

113

输出:

20.32308

9尼克的任务(Lignja)

【问题描述】

尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成。

尼克的一个工作日为N分钟,从第一分钟开始到第N分钟结束。

当尼克到达单位后他就开始干活。

如果在同一时刻有多个任务需要完成,尼克可以任选其中的一个来做,而其余的则由他的同事完成,反之如果只有一个任务,则该任务必需由尼克去写成,假如某些任务开始时刻尼克正在工作,则这些任务也由尼克的同事完成。

如果某任务于第P分钟开始,持续时间为T分钟,则该任务将在第P+T-1分钟结束。

写一个程序计算尼克应该如何选取任务,才能获得最大的空暇时间。

【输入文件】

输入数据第一行包含两个用空格隔开的整数N和K,1≤N≤10000,1≤K≤10000,N表示尼克的工作时间,单位为分,K表示任务总数。

接下来共有K行,每一行有两个用空格隔开的整数P和T,表示该任务从第P分钟开始,持续时间为T分钟,其中1≤P≤N,1≤P+T-1≤N。

【输出文件】

输出文件仅一行包含一个整数表示尼克可能获得的最大空暇时间。

【输入输出样例】

输入:

156

12

16

411

85

81

115

输出:

4

10加油问题(Oil)

【问题描述】

一个美国旅行代理上经常被要求去估计开车从一个城市旅行至另一个城市的最小费用。

他有一个在通常路线上的大多数加油站的列表。

列表包括了所有加油站的位置及当前每加仑汽油的价格。

为了简化估计费用的过程,代理商使用了以下的简化汽车驾驶员行为的规则:

●除非汽车无法用油箱里的汽油达到下一个加油站(如果有的话)或目的地,在油箱里还有不少于最大容量一半的汽油时,驾驶员从不在加油站停下来。

●在每一个停下的加油站,驾驶员总是将油加满。

●在一个加油站停下之后,驾驶员将为旅程在快餐和糖果上花去2.00元。

●在驶向加油站或目的地时,驾驶员不需要超过必须量的汽油。

不需要“安全余量”。

●驾驶员开始旅行时油箱总是满的

●每个加油站付款时四舍五入到分(1元等于100分)。

你必须写一个程序以估计驾驶员在旅程上至少要为汽油和食品付多少钱。

【输入文件】

从文本文件oil.in中读入数据。

开始的2行给出了出发地和目的地的信息。

数据项的后继行代表了路线上的加油站,每个加油站用一行表示。

下面是输入数据中数据项的精确格式及其含义。

第一行:

一个实数——从出发地到目的地的距离(英里)

第二行:

三个实数及一个整数

●第一个实数是汽车油箱的最大的容量(加仑)

●第二个实数是汽车每加仑汽油可以行驶的英里数

●第三个实数是汽车在出发地城市加满油箱的费用(单位:

元)

●整数(小于51)是路线上加油站的数目

接下来的每一行:

两个实数

●第一个实数是从出发地到加油站的距离(单位:

英里)

●第二个实数是该加油站出售的汽油每加仑的价格(单位:

分)

数据项中的所有数据都是正的。

一条路线上的加油站根据其到出发地的距离递增排列。

路线上不存在这样的加油站,它到出发点的距离大于从出发点到目的地的距离。

每条路线上的加油站都被适当的安排以使得任何汽车都能从出发地开到目的地。

【输出文件】

仅一行,一个实数(保留两位小数),表示最小的花费(单位:

元)。

【输入输出样例】

输入:

475.6

11.927.414.986

102.099.9

220.0132.9

256.3147.9

275.0102.9

277.6112.9

381.8100.9

输出:

27.31

11!

POLYGON{只要求斜率,就交叉相乘。

这样可以避免0的情况}

【问题描述】

对于一个多边形来说,在该多边形内任取两点,如果这两点连成的线段落在多边形内,则称这样的多边形为凸多边形。

平面上有N个坐标值为自然数的圆点。

顶点数最多凸多边形是指由给定的圆点中的一部分组成的凸多边形,它包含最大可能的顶点数。

原点,即坐标内中心(0,0)必须是顶点数最多凸多边形的一个顶点。

编写程序求出这样的凸多边形的最大顶点数。

注意一个多边形的连续的边不能是平行的。

【输入文件】

输入文件的第一行包含一个自然数N,2≤N≤100,表示给定的圆点数。

下面的N行每行包含两个用空格隔开的自然数X和Y,1≤X≤100,1≤Y≤100,表示一个圆点的坐标值。

所有的圆点是不相同的。

【输出文件】

输出文件的第一行也是唯一的一行应该包含顶点数最多凸多边形的顶点数。

注意结果应不小于3。

【输入输出样例】

输入:

8

108

39

28

23

92

910

103

810

输出:

8

12POWER{区间问题,一般就要设数组f[I,j]}

{而且数据规模为1000*1000,一般就要考虑二维数组}{设两个数组,如f[I,j],g[I,j];f[I,j]中的i表示向左走,g[I,j]中的j表示向右走}

【问题描述】

多瑞卡得到了一份有趣而高薪的工作。

每天早晨他必须关掉他所在村庄的街灯。

所有的街灯都被设置在一条直路的同一侧。

多瑞卡每晚到早晨5点钟都在晚会上,然后他开始关灯。

开始时,他站在某一盏路灯的旁边。

每盏灯都有一个给定功率的电灯泡,因为多端卡有着自觉的节能意识,他希望在耗能总数最少的情况下将所有的灯关掉。

多端卡因为太累了,所以只能以1m/s的速度行走。

关灯不需要花费额外的时间,因为当他通过时就能将灯关掉。

{关键语,‘石子合并’类型的应用}

编写程序,计算在给定路灯设置,灯泡功率以及多端卡的起始位置的情况下关掉所有的灯需耗费的最小能量。

【输入文件】

输入文件的第一行包含一个整数N,2≤N≤1000,表示该村庄路灯的数量。

第二行包含一个整数V,1≤V≤N,表示多瑞卡开始关灯的路灯号码。

接下来的N行中,每行包含两个用空格隔开的整数D和W,用来描述每盏灯的参数,其中0≤D≤1000,0≤W≤1000。

D表示该路灯与村庄开始处的距离(用米为单位来表示),W表示灯泡的功率,即在每秒种该灯泡所消耗的能量数。

路灯是按顺序给定的。

【输出文件】

输出文件的第一行即唯一的一行应包含一个整数,即消耗能量之和的最小值。

注意结果小超过1,000,000,000。

{fori:

=n-1downto1do{因为没关掉的那些灯此刻仍在消耗能量,所以用和来减}

Forj:

=i+1tondo

begin

f[I,j]:

=min(f[I+1,j]+(d[i+1]-d[i])*(ans-sum[i+1,j]),g[i+1,j]+(d[j]-d[i])*(ans-sum[i+1,j]));

g[i,j]:

=min(g[i,j-1]+(d[j]-d[j-1])*(ans-sum[i+1,j]),f[i,j-1]+(d[j]-d[i])*(ans-sum[i,j-1]));

【输入输出样例】

输入:

4

3

22

58

61

87

输出:

56

13清扫(Stables){最小生成树}

【问题描述】

现在要打扫国王的牧圈。

已经30年没打扫了。

所以这次的计划是用河水来冲。

牧圈排成整齐的格子,每相邻的两个之间都有门。

要想让水进去,就必须打开这些门。

这不是件容易的事情。

因为有些圈里土堆得很高。

因此打开门就很费劲。

为了使花的力气最小,总是把门推向土低的一边。

你的任务是计算最少得费多少劲。

我们用土的厚度来描述这个值。

【输入文件】

第一行是宽度w和高度h,其中3<=w,h<=40。

以下h行数据,描述了土的高度,也就是我们所浪费体力的度量。

数据的范围在1到100之间。

【输出文件】

你得到的结果。

所有的格子都必须进水。

水是从左上角的格子进去的。

【输入输出样例】

输入:

43

3521

7348

1657

输出:

26

14零件分组(Stick)

【问题描述】

某工厂生产一批棍状零件,每个零件都有一定的长度(Li)和重量(Wi)。

现在为了加工需要,要将它们分成若干组,使每一组的零件都能排成一个长度和重量都不下降(若i

请问至少要分成几组?

【输入文件】

第一行为一个整数N(N<=1000),表示零件的个数。

第二行有N对正整数,每对正整数表示这些零件的长度和重量,长度和重量均不超过10000。

【输出文件】

仅一行,即最少分成的组数。

【输入输出样例】

输入:

5

8438239735

输出:

2

15最小交换合并问题(Stone)

【问题描述】

在操场上沿一直线排列着n堆石子。

现要将石子有次序地合并成一堆。

规定每次只能选相邻的两堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。

允许在第一次合并前对调一次相邻两堆石子的次序。

计算在上述条件下将n堆石子合并成一堆的最小得分和初次交换的位置。

【输入文件】

输入数据共有二行,其中,第1行是石子堆数n≤100;

第2行是顺序排列的各堆石子数(≤20),每两个数之间用空格分隔。

【输出文件】

输出合并的最小得分。

【输入输出样例】

输入:

3

251

输出:

11

16!

观光游览(View)

 

【问题描述】

一条街道被分成m格(1<=m<=100),还有n个景点(1<=n<=100),分布在街道上。

每个景点可以占据连续的若干格,并且有一个美学值v(0

现要组织k个人考察这个街道(1<=k<=m),每个人考察的区域是连续的若干格(不可为0格),且任意两个人考察的区域不得相交,也不得有一个格子无人考察。

对于任意一个人,如果它考察的区域中有一个风景点(风景点必须完整的位于这个区域),则它就得到了这个风景点的分值(美学值)。

你的任务是将街道的m个格子分给k个人去考察,使得总的分值最大。

【输入文件】

第一行一个整数m,表示街道的长度。

第二行一个整数n,表示风景点个数。

此后n行,每行描述一个风景点,三个整数x、y和v,表示该风景点是从第x个格子到第y个格子,美学值为v。

最后一行一个整数k,表示考察的人数。

【输出文件】

一个整数,表示最大可以得到的分值。

【输入输出样例】

输入:

3

2

122

233

2

输出:

3

17!

文件排版(Format){背包}

【问题描述】

写电子邮件是有趣的,但不幸的是经常写不好看,主要是因为所有的行不一样长,你的上司想要发排版精美的电子邮件,你的任务是为他编写一个电子邮件排版程序。

完成这个任务最简单的办法是在太短的行中的单词之间插入空格,但这并不是最好的方法,考虑如下例子:

****************************

Thisistheexampleyouare

actuallyconsidering.

假设我们想将第二行变得和第一行一样长,靠简单地插入空格则我们将得到如下结果:

****************************

Thisistheexampleyouare

actuallyconsidering.

但这太难看了,因为在第二行中有一个非常大的空白,如果将第一行的单词“are”移到下一行我们将得到较好的结果:

****************************

Thisistheexampleyou

areactuallyconsidering.

当然,这必须对难看程度进行量化。

因此我们必须给出单词之间的空格的难看程度,一个包含N个空格符的空白段,其难看程度值为(n-1)2,程序的目的是使难看程度的总和最小化。

例如,第一个例子的难看程度是1+7*7=50,而第二个例子的难看程度仅为1+1+1+4+1+4=12。

输出时,每一行的开头和结尾处都必须是一个单词,即每行开头和结尾处不能有空白。

唯一例外的是该行仅有一个单词组成的情况,对于这种情况你可将单词放在该行开头处输出,此时如果该单词比该行应有的长度短则我们指定它的最坏程度为500,当然在这种情况下,该行的实际长度即为该单词的长度。

【输入文件】

输入文件第一行是一个整数N,表示该段要求达到的宽度,1<=N<=80。

该段文章由一个或多个单词组成,单词由ASCII码值为33到126(包含33和126)的字符组成,单词与单词之间用空格隔开(可能超过一个)。

单词长度不会超过段落要求达到的宽度。

一段文字所有单词的总长度不会超过10000个字符,任何一行都不会超过100个字符,任何一个单词都在同一行内。

【输出文件】

对于每个段落,找出使其难看程度最小的排版形式并输出句子:

“MinimalbadnessisB.”,B是指按可能的最好排版形式会发生的难看程度值。

注意排版后文本行数任意,多余的空格也可删除。

【输入输出样例】

输入:

28

Thisistheexampleyouare

actuallyconsidering.

输出:

Minimalbadnessis12.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1