动态规划部分常见题目

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

动态规划部分常见题目

作者: 发表于2011-06-10 14:20:49【大中小】浏览:230次评论:0条

求两个字符串的最长公共子序列

0-1背包问题

骑士游历

设有一个n*m的棋盘(2<=n<=50,2<=m<=50),在棋盘上任一点有一个中国象棋马,马走的规则为:1.马走日字 2.马只能向右走.

任务1:当N,M 输入之后,找出一条从左下角到右上角的路径.

例如:输入 N=4,M=4

输出:路径的格式:(1,1)->(2,3)->(4,4)

若不存在路径,则输出"no"

任务2:当N,M 给出之后,同时给出马起始的位置和终点的位置,试找出从起点到终点的所有路径的数目.

例如:(N=10,M=10),(1,5)(起点),(3,5)(终点)

输出:2(即由(1,5)到(3,5)共有2条路径)

输入格式:n,m,x1,y1,x2,y2(分别表示n,m,起点坐标,终点坐标)

输出格式:路径数目(若不存在从起点到终点的路径,输出0)

数字三角形

(图3.1-1)示出了一个数字三角形。请编一个程序计算从顶至底的某处的一条路

径,使该路径所经过的数字的总和最大。

●每一步可沿左斜线向下或右斜线向下走;

●1<三角形行数≤100;

●三角形中的数字为整数0,1,…99;

输入数据:

由INPUT.TXT文件中首先读到的是三角形的行数。

在例子中INPUT.TXT表示如下:

5

7

3 8

8 1 0

2 7 4 4

4 5 2 6 5

输出数据:

把最大总和(整数)写入OUTPUT.TXT文件。上例为:

30

38

810

2744

45265

(图3.1-1)

添加号

有一个由数字1,2,... ,9组成的数字串(长度不超过200),问如何将M(M<=20)个加号("+")插入到这个数字串中,使所形成的算术表达式的值最小。请编一个程序解决这个问题。

注意:

加号不能加在数字串的最前面或最末尾,也不应有两个或两个以上的加号相邻。

M保证小于数字串的长度。

例如:数字串79846,若需要加入两个加号,则最佳方案为79+8+46,算术表达式的值133。

[输入格式]

数字串在输入文件的第一行行首(数字串中间无空格且不折行),M的值在输入文件的第二行行首。

[输出格式]

在屏幕上输出所求得的最小和的精确值。

[输入输出举例]

EXAM4.SAM

82363983742

3

输入输出

EXAM4.SAM 2170

棋盘分割

将一个8×8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共有n块矩形棋盘。(每次切割都只能沿着棋盘格子的边进行)

允许的分割方案不允许的分割方案

原棋盘上每一格有一个分值,一块矩形棋盘的总分为其所含各格分值之和。现在需要把棋盘按上述规则分割成n块矩形棋盘,并使各矩形棋盘总分的均方差最小。

均方差,其中平均值 x i为第i块矩形棋盘的分。

请编程对给出的棋盘及n,求出

的最小值。

输入

第1行为一个整数n(1

第2行至第9行每行为8个小于100的非负整数,表示棋盘上相应格子的分值。每行相邻两数之间用一个空格分隔。

输出

仅一个数,为

(四舍五入精确到小数点后三位)。

样例输入

3

1 1 1 1 1 1 1 3

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 0

1 1 1 1 1 1 0 3

样例输出

1.633

4..防卫导弹

一种新型的防卫导弹可截击多个攻击导弹。它可以向前飞行,也可以用很快的速度向下飞行,可以毫无损伤地截击进攻导弹,但不可以向后或向上飞行。但有一个缺点,尽管它发射时可以达到任意高度,但它只能截击比它上次截击导弹时所处高度低或者高度相同的导弹。现对这种新型防卫导弹进行测试,在每一次测试中,发射一系列的测试导弹(这些导弹发射的间隔时间固定,飞行速度相同),该防卫导弹所能获得的信息包括各进攻导弹的高度,以及它们发射次序。现要求编一程序,求在每次测试中,该防卫导弹最多能截击的进攻导弹数量,一个导弹能被截击应满足下列两个条件之一:

1、它是该次测试中第一个被防卫导弹截击的导弹;

2、它是在上一次被截击导弹的发射后发射,且高度不大于上一次被截击导弹的高度的导弹。

输入格式:

从当前目录下的文本文件“CATCHER.DAT”读入数据。该文件的第一行是一个

整数N(0〈=N〈=4000),表示本次测试中,发射的进攻导弹数,以下N行每行各有一个整数hi(0〈=hi〈=32767),表示第i个进攻导弹的高度。文件中各行的行首、行末无多余空格,输入文件中给出的导弹是按发射顺序排列的。

输出格式:

答案输出到当前目录下的文本文件“CATCHER.OUT”中,该文件第一行是一个整数max,表示最多能截击的进攻导弹数,以下的max行每行各有一个整数,表示各个被截击的进攻导弹的编号(按被截击的先后顺序排列)。输出的答案可能不唯一,只要输出其中任一解即可。

输入输出举例:

6.石子合并

在一个圆形操场的四周摆放着N堆石子(N<= 100),现要将石子有次序地合并成一堆.规定每次只能选取相邻的两堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分.编一程序,由文件读入堆栈数N及每堆栈的石子数(<=20).

(!)选择一种合并石子的方案,使用权得做N-1次合并,得分的总和最小;

(2)选择一种合并石子的方案,使用权得做N-1次合并,得分的总和最小;

输入数据:

第一行为石子堆数N;

第二行为每堆的石子数,每两个数之间用一个空格分隔.

相关文档
最新文档