动态规划习题完整版

合集下载

动态规划练习例题

动态规划练习例题
c(m,n)为最终最小代价,反向追踪获得编辑序列
动态规划方法总结
动态规划算法的设计步骤
– – – – – – – 将问题表示成多步判断 确定是否满足优化原则——必要条件 确定子问题的重叠性——估计算法效率 列出关于优化函数的递推方程(或不等式)和边界条件 自底向上计算子问题的优化函数值----非递归的算法 备忘录方法记录中间结果 标记函数追踪问题的解
• S(i)表示结束于位置i的最大子区间和 • max{S(i)}即为所求最大子区间和 • 考虑如何递推求解并反算问题解
最大子矩阵
• 已知矩阵的大小定义为矩阵中所有元素的 和。给定一个矩阵,找到最大的非空(大小 至少是1 * 1)子矩阵。 • 例如这个矩阵的最大子矩阵大小为15。
0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2
动态规划练习例题在棋盘上移动在一个nn的棋盘上棋子可以向上方右上方或左上方移动每次从x方格移动到y方格将获得pxy元钱pxy不一定是正数现求一个获得钱最多的从底边到顶边的一种移动棋子的方案
动态规划练习例题
在棋盘上移动
• 在一个n×n的棋盘上,棋子可以向上方、 右上方或左上方移动,每次从x方格移动到y 方格将获得p(x,y)元钱, p(x,y)不一定是正 数,现求一个获得钱最多的从底边到顶边 的一种移动棋子的方案。
解题思路
Qx, y 1 Q x, y max Qx 1, y 1 Q x 1, y 1 y 1 px, y 1, x, y y 1 px 1, y 1, x, y y 1且x 1 px 1, y 1, x, y y 1且x 字符串X=x1,x2,…xm和Y=y1,y2,…yn 使用一系列编辑操作将字符串X转变成Y。允许使 用插入,删除,修改三种操作,每种操作都有 一定的代价,求一个总代价最小的操作序列。 – 设从字符X中删除符号xi的代价为D(xi) – 将符号yj插入X的代价为I(yj) – 将X中的符号xi修改成yj的代价为C(xi,yj)

动态规划练习题及解答1

动态规划练习题及解答1

动态规划练习题[题1] 多米诺骨牌(DOMINO)问题描述:有一种多米诺骨牌是平面的,其正面被分成上下两部分,每一部分的表面或者为空,或者被标上1至6个点。

现有一行排列在桌面上:顶行骨牌的点数之和为6+1+1+1=9;底行骨牌点数之和为1+5+3+2=11。

顶行和底行的差值是2。

这个差值是两行点数之和的差的绝对值。

每个多米诺骨牌都可以上下倒置转换,即上部变为下部,下部变为上部。

现在的任务是,以最少的翻转次数,使得顶行和底行之间的差值最小。

对于上面这个例子,我们只需翻转最后一个骨牌,就可以使得顶行和底行的差值为0,所以例子的答案为1。

输入格式:文件的第一行是一个整数n(1〈=n〈=1000〉,表示有n个多米诺骨牌在桌面上排成一行。

接下来共有n行,每行包含两个整数a、b(0〈=a、b〈=6,中间用空格分开〉。

第I+1行的a、b分别表示第I个多米诺骨牌的上部与下部的点数(0表示空)。

输出格式:只有一个整数在文件的第一行。

这个整数表示翻动骨牌的最少次数,从而使得顶行和底行的差值最小。

[题2] Perform巡回演出题目描述:Flute市的Phlharmoniker乐团2000年准备到Harp市做一次大型演出,本着普及古典音乐的目的,乐团指挥L.Y.M准备在到达Harp市之前先在周围一些小城市作一段时间的巡回演出,此后的几天里,音乐家们将每天搭乘一个航班从一个城市飞到另一个城市,最后才到达目的地Harp市(乐团可多次在同一城市演出).由于航线的费用和班次每天都在变,城市和城市之间都有一份循环的航班表,每一时间,每一方向,航班表循环的周期都可能不同.现要求寻找一张花费费用最小的演出表.输入: 输入文件包括若干个场景.每个场景的描述由一对整数n(2<=n<=10)和k(1<=k<=1000)开始,音乐家们要在这n个城市作巡回演出,城市用1..n标号,其中1是起点Flute市,n是终点Harp市,接下来有n*(n-1)份航班表,一份航班表一行,描述每对城市之间的航线和价格,第一组n-1份航班表对应从城市1到其他城市(2,3,...n)的航班,接下的n-1行是从城市2到其他城市(1,3,4...n)的航班,如此下去.每份航班又一个整数d(1<=d<=30)开始,表示航班表循环的周期,接下来的d个非负整数表示1,2...d天对应的两个城市的航班的价格,价格为零表示那天两个城市之间没有航班.例如"3 75 0 80"表示第一天机票价格是75KOI,第二天没有航班,第三天的机票是80KOI,然后循环:第四天又是75KOI,第五天没有航班,如此循环.输入文件由n=k=0的场景结束.输出:对每个场景如果乐团可能从城市1出发,每天都要飞往另一个城市,最后(经过k天)抵达城市n,则输出这k个航班价格之和的最小值.如果不可能存在这样的巡回演出路线,输出0.样例输入: 样例输出:3 6 4602 130 150 03 75 0 807 120 110 0 100 110 120 04 60 70 60 503 0 135 1402 70 802 32 0 701 800 0[题3] 复制书稿(BOOKS)问题描述:假设有M本书(编号为1,2,…M),想将每本复制一份,M本书的页数可能不同(分别是P1,P2,…PM)。

动态规划试题

动态规划试题

动态规划试题动态规划装箱问题(01背包):有⼀个箱⼦容量为VV(正整数,0≤V≤20000),同时有n个物品(024 68 3 12 7 9 7输出:0f[j]=max(f[j],f[j-w[i]]+w[i]);f[j] 为:当总容量为j 时,不放第i 件物品,所能装的最⼤体积。

f[j-w[i]]+w[i] 为:当总容量为j 时,放了第i 件物品后,所能装的最⼤体积。

(即j减去第i 件物品体积的容量能装的最⼤体积+第i 件物品的体积。

w[i] 为第i 件物品体积)背包的种类:背包分为01背包,多重背包以及完全背包这三种基本模型,其他的背包问题都是从这3种背包中延申出来的。

完全背包的模板题⾯是这样的:设有n种物品,每种物品有⼀个重量及⼀个价值。

但每种物品的数量是⽆限的,同时有⼀个背包,最⼤载重量为M,今从n种物品中选取若⼲件(同⼀种物品可以⽆限选取),使其重量的和⼩于等于M,⽽价值的和为最⼤。

完全背包[⽆限量]的采摘药输⼊:70 371 10069 11 2输出:140每个数组在满⾜条件,可以遍历多次01背包实现代码:采药-传送门输⼊:70 371 10069 11 2输出:3每个数组遍历⼀遍题⽬描述⾦明今天很开⼼,家⾥购置的新房就要领钥匙了,新房⾥有⼀间他⾃⼰专⽤的很宽敞的房间。

更让他⾼兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就⾏”。

今天⼀早⾦明就开始做预算,但是他想买的东西太多了,肯定会超过妈妈限定的N元。

于是,他把每件物品规定了⼀个重要度,分为5等:⽤整数1-5表⽰,第5等最重要。

他还从因特⽹上查到了每件物品的价格(都是整数元)。

他希望在不超过N元(可以等于N 元)的前提下,使每件物品的价格与重要度的乘积的总和最⼤。

设第jj件物品的价格为v_[j],重要度为w_[j],共选中了k件物品,编号依次为j_1,j_2,…,j_k,则所求的总和为:w_[j_k]v[j1]×w[j1]+v[j2]×w[j2]+…+v[jk]×w[jk]。

动态规划练习题(含答案)

动态规划练习题(含答案)

动态规划练习题USACO 2.2 Subset Sums题目如下:对于从1到N的连续整集合合,能划分成两个子集合,且保证每个集合的数字和是相等的。

举个例子,如果N=3,对于{1,2,3}能划分成两个子集合,他们每个的所有数字和是相等的:and {1,2}这是唯一一种分发(交换集合位置被认为是同一种划分方案,因此不会增加划分方案总数)如果N=7,有四种方法能划分集合{1,2,3,4,5,6,7},每一种分发的子集合各数字和是相等的:{1,6,7} and {2,3,4,5} {注1+6+7=2+3+4+5}{2,5,7} and {1,3,4,6}{3,4,7} and {1,2,5,6}{1,2,4,7} and {3,5,6}给出N,你的程序应该输出划分方案总数,如果不存在这样的划分方案,则输出0。

程序不能预存结果直接输出。

PROGRAM NAME: subsetINPUT FORMAT输入文件只有一行,且只有一个整数NSAMPLE INPUT (file subset.in)7OUTPUT FORMAT输出划分方案总数,如果不存在则输出0。

SAMPLE OUTPUT (file subset.out)4参考程序如下:#include <fstream>using namespace std;const unsigned int MAX_SUM = 1024;int n;unsigned long long int dyn[MAX_SUM];ifstream fin ("subset.in");ofstream fout ("subset.out");int main() {fin >> n;fin.close();int s = n*(n+1);if (s % 4) {fout << 0 << endl;fout.close ();return ;}s /= 4;int i, j;dyn [0] = 1;for (i = 1; i <= n; i++)for (j = s; j >= i; j--)dyn[j] += dyn[j-i];fout << (dyn[s]/2) << endl;fout.close();return 0;}USACO 2.3 Longest Prefix题目如下:在生物学中,一些生物的结构是用包含其要素的大写字母序列来表示的。

动态规划作业完整

动态规划作业完整

动态规划作业1、1、设某工厂自国外进口一部精密机器,由机器制造厂至出口港有三个港口可供选择,而进口港又有三个可供选择,进口后可经由两个城市到达目的地,其间的运输成本如图中所标的数字,试求运费最低的路线?把A看作终点,该问题可分为4个阶段。

f k(S k)表示从第K阶段点S k到终点A的最短距离。

f4(B1)=20,f4(B2)=40,f4(B3)=30f3(C1)=min[d3(C1,B1)+ f4(B1), d3(C1,B2)+ f4(B2), d3(C1,B3)+ f4(B3) ]=70,U3(C1)= B2 或B3f3(C2)=40 ,U3(C2)= B3f3(C3)=80 ,U3(C3)= B1或B2 或B3f2(D1)=80 ,U2(D1)= C1f2(D2)=70 ,U2(D2)= C2f1(E)=110 ,U1(E)= D1或D2所以可以得到以下最短路线,E→D1→C1→B2 / B3→AE→D2→C2→B3→A2、习题4-2解:1)将问题按地区分为三个阶段,三个地区的编号分别为1、2、3;2)设Sk表示为分配给第k个地区到第n个地区的销售点数,Xk表示为分配给第k个地区的销售点数,S k+1=S k-X kPk(Xk)表示为Xk个销售点分到第k个地区所得的利润值fk(Sk)表示为Sk个销售点分配给第k个地区到第n个地区的最大利润值3)递推关系式:fk(Sk)=max[ Pk(Xk)+ f k+1(S k-X k) ] k=3,2,1f4(S4)=04)从最后一个阶段开始向前逆推计算第三阶段:设将S3个销售点(S3=0,1,2,3,4)全部分配给第三个地区时,最大利润值为:f3(S3)=max[P3(X3)] 其中X3=S3=0,1,2,3,4表1第二阶段:设将S2个销售点(S2=0,1,2,3,4)分配给乙丙两个地区时,对每一个S2值,都有一种最优分配方案,使得最大盈利值为:f2(S2)=max[ P2(X2)+ f3(S2-X2) ]其中,X2=0,1,2,3,4表2第一阶段:设将S1个销售点(S1=4)分配给三个地区时,则最大利润值为:f1(S1)=max[ P1(X1)+ f2(4-X1) ]其中,X1=0,1,2,3,4表3然后按计算表格的顺序反推,可知最优分配方案有两个:最大总利润为531)由X1*=2,X2*=1,X3*=1。

运筹学动态规划习题

运筹学动态规划习题

二、某厂有100台机床,能够加工两种零件, 要安排4个月的任务,根据以往经验,用这 些机床加工第一种零件,一个月后损坏率 为1/3;加工第二种零件时,一个月后损坏 率为1/10。又已知机床加工第一种零件时一 个月的受益为10万元,机床加工第二种零 件时一个月的受益为7万元。现安排4个月 的任务,使总收益为最大。
• 首先建立动态规划的模型 • 划分成3个阶段,每个阶段决策一个项目 的投资额,每个阶段决策的投资时可以使 用的资金作为状态变量,利润为阶段的指 标函数。 • 利用基本递推方程从第3阶段开始求解 • 给企业的投资额为 95万元 在城市购买房 地产的投资额为 105万元 • 最大利润为 681万元

三、某公司有资金200万元,打算全部参与三 个方面的投资。(1)参与一个企业投资, 当投资额为X1(万元)时,可得利润为 J1=4X1-2(万元);(2)参与一个电视片 制作,当投资额为X2(万元)时,可得利 润为J2=1/16X2-1/5X2-2(万元);(3)在 城市购买房地产,当投资额为X3(万元) 时,可得利润为J3=3X3-10(万元)。又知 投资额的上限为X1≤95万元;X2≤50万元。 用动态规划法决策使总利润最大?
• 答案: • 设每个月为一个阶段,共4个阶段。每个阶 段可投入生产的机床数为状态变量SK,加 工第一种零件的机床数为决策变量UK,加 工第二种零件的机床数为SK-UK,阶段指标 函数为DK=7SK+3UK,SK+1=9/10SK-7/30UK。 用逆序的递推方法求解:前两月全部加工 第二种零件,后两月全部加工第一种零件。 其最大收益为2680
习题三
一、某工厂购进100台机器,准备生产A、B 两种产品。如生产产品A,每台机器每年可 收入45万元,损坏率为65%;若生产产品B, 每台机器每年可收入35万元,损坏率为 35%;估计三年后有新机器出现,旧的机 器将全部淘汰。试问每年应然后安排生产, 使在三年内收入最多?

动态规划作业完整

动态规划作业完整

动态规划作业1、1、设某工厂自国外进口一部精密机器,由机器制造厂至出口港有三个港口可供选择,而进口港又有三个可供选择,进口后可经由两个城市到达目的地,其间的运输成本如图中所标的数字,试求运费最低的路线?把A看作终点,该问题可分为4个阶段。

f k(S k)表示从第K阶段点S k到终点A的最短距离。

f4(B1)=20,f4(B2)=40,f4(B3)=30f3(C1)=min[d3(C1,B1)+ f4(B1), d3(C1,B2)+ f4(B2), d3(C1,B3)+ f4(B3) ]=70,U3(C1)= B2 或B3f3(C2)=40 ,U3(C2)= B3f3(C3)=80 ,U3(C3)= B1或B2 或B3f2(D1)=80 ,U2(D1)= C1f2(D2)=70 ,U2(D2)= C2f1(E)=110 ,U1(E)= D1或D2所以可以得到以下最短路线,E→D1→C1→B2 / B3→AE→D2→C2→B3→A2、习题4-2解:1)将问题按地区分为三个阶段,三个地区的编号分别为1、2、3;2)设Sk表示为分配给第k个地区到第n个地区的销售点数,Xk表示为分配给第k个地区的销售点数,S k+1=S k-X kPk(Xk)表示为Xk个销售点分到第k个地区所得的利润值fk(Sk)表示为Sk个销售点分配给第k个地区到第n个地区的最大利润值3)递推关系式:fk(Sk)=max[ Pk(Xk)+ f k+1(S k-X k) ] k=3,2,1f4(S4)=04)从最后一个阶段开始向前逆推计算第三阶段:设将S3个销售点(S3=0,1,2,3,4)全部分配给第三个地区时,最大利润值为:f3(S3)=max[P3(X3)] 其中X3=S3=0,1,2,3,4表1第二阶段:设将S2个销售点(S2=0,1,2,3,4)分配给乙丙两个地区时,对每一个S2值,都有一种最优分配方案,使得最大盈利值为:f2(S2)=max[ P2(X2)+ f3(S2-X2) ]其中,X2=0,1,2,3,4表2第一阶段:设将S1个销售点(S1=4)分配给三个地区时,则最大利润值为:f1(S1)=max[ P1(X1)+ f2(4-X1) ]其中,X1=0,1,2,3,4表3然后按计算表格的顺序反推,可知最优分配方案有两个:最大总利润为531)由X1*=2,X2*=1,X3*=1。

动态规划 练习题

动态规划  练习题

23.(11分)请用动态规划逆序求解法求解下列问题:求出下图中从A到E的最短路线及长度。

在图中标出每个点到终点的最短距离。

24. (11分)一个旅行者从A点出发,经过B、C、D等处,到达E。

各地间距离如图中所示。

问该旅行者应选择哪一条路线,使从A到E的总路程最短?(可直接在图上标号,最后给定答案)
24.一个旅行者从A点出发,经过B、C、D等处,到达E。

各地间距离如图中所示。

问该旅行者应选择哪一条路线,使从A到E的总路程最短?(可直接在图上标号,最后给定答案)(11分)
解:此为动态规划之“最短路问题”,可用逆向追踪“图上标号法”解决如下:
最佳策略为:A →B 2→C 1→D 1→E 或A →B 3→C 1→D 1→E 此时从A 到E 的总路程的最短距离都是11
23. 请用动态规划逆序求解法求解下列问题:
各点标号依次为:A:8, B1:7,B2:6, B3:8, C1:5, C2:4,D1:3,D2:1,D3:5.
25. 某厂生产C B A ,,三种产品,其所需劳动力、材料等有关数据见下表。

要求:建立模型,并用单纯形法计算,确定获利最大的产品生产计划。

解:(1)设C B A ,,
各生产321,,x x x 件。


32143min x x x z ++=
st.⎪⎩⎪
⎨⎧=≥≤++≤++)3,2,1(,03054345
536321321j x x x x x x x j
(4分)
获利最大的生产计划是C B A ,,各生产5件、0件、3件,最大利润为273453=⨯+⨯=z 元。

(15分)。

运筹学 动态规划-作业及答案

运筹学 动态规划-作业及答案

1
第五章 动态规划作业题及答案
1.用动态规划法求解求最短路径
从起点A 到终点E 之间各点的距离如图所示。

求A 到E 的最短路径。

B A
C B
D B C D E
C 21
23
12
31
2
5
11214
10610
41312113
96
5810
5
2
2.用动态规划法求解资源分配问题
有资金4万元,投资A 、B 、C 三个项目,每个项目的投资效益与投入该项目的资金有关。

三个项目A 、B 、C 的投资效益(万吨)和投入资金(万元)的关系见下表:
用动态规划法求解对三个项目的最优投资分配,使总投资效益最大。

3.用动态规划法求解生产库存问题
一个工厂生产某种产品,1~7月份生产成本和产品需求量的变化情况如下表:
为了调节生产生产和需求,工厂设有一个产品仓库,库容量H=9。

已知期初库存量为2,要求期末(七月低)库存量为0。

每个月生产的产品在月末入库,月初根据当月需求发货。

求七个月的生产量,能满足各月的需求,并使生产成本最低。

4.用动态规划法求解背包问题
第i 种每件价值c 1=65,c 2=85,c 3=40元; 第i 种物品每件重量为:w 1=2,w 2=3,w 3=1公斤;现有一只可装载重量为5公斤的背包,求各种物品应各取多少件放入背包,使背包中物品的价值最高。

动态规划习题课

动态规划习题课

练习1:某厂生产三种产品,多种产品重量与利 润旳关系如表所示。现将此三种产品运往市场出售, 运送能力总重量不超出 6 吨,问怎样安排运送,使 总利润最大?
种类
123
重量(吨/公斤)
234
单件利润(元) 80 130 180
最优方案:X1 =(0.2.0)X2 =(1.0.1) Z=260
例4 投资问题
w2(5,3)+f3(2) w2(5,2)+f3(3) =max
12+8 10+11
=21
w2(5,1)+f3(4)
5+15
当k=1时,有s1=5 D1(s1)={0,1,2,3,4}
w1(5,4)+f2(1)
12+4
w1(5,3)+f2(2)
10+9
f1(5)=max w1(5,2)+f2(3) =max 6+14 =21
可提高成绩 aij , (i, j 1,2,3,4) 。用动态规划方法求使其 成绩提高最多的复习天数安排计划。要求写出问题的 阶段变量,状态变量,决策变量,阶段指标函数,基 本方程(递推公式)。
max
0x3x整3 数 a53
12 x3 f2 (5 5 x3 )
=max
0
x3
5 5
12 x3 f2 (5 5 x3 )
x3整数
=max x3=0,1
12 x3
f2(5 5x3 )
=max0 f2 (5),
12 f2 (0)
( x3 0)
( x3 1)
f2(5)
w1(5,1)+f2(4)
3+18
w1(5,0)+f2(5)

动态规划专项练习(1)

动态规划专项练习(1)

动态规划专项练习(1)动态规划专项练习(1)1、警卫安排(security.pas/c/cpp)一个重要的基地被分为n个连通的区域。

出于某种神秘的原因,这些区域以一个区域为核心,呈一颗树形分布。

在每个区域安排警卫所需要的费用是不同的,而每个区域的警卫都可以望见其相邻的区域,只要一个区域被一个警卫望见或者是安排有警卫,这个区域就是安全的。

你的任务是:在确保所有区域都是安全的情况下,找到安排警卫的最小费用。

输入数据第一行n,表示树中结点的数目。

接下来的n行描述了n个区域的信息,每一行包含的整数依次为:区域的标号i(0<i<=n),在区域i安排警卫的费用k,区域i的子结点数目m,接下来m个数为区域i p="" 的子结点编号。

<=""> 输出数据一行一个整数,为最小的安排费用。

样例输入:security.in61 30 323 42 16 2 5 63 5 04 4 05 11 06 5 0输出security.out25数据范围对于所有的数据,0<n<=720。

< p="">2、最长上升子序列(LIS.pas/c/cpp)LIS问题是最经典的动态规划基础问题之一。

如果要求一个满足一定条件的最长上升子序列,你还能解决吗?给出一个长度为N整数序列,请求出它的包含第K个元素的最长上升子序列。

例如:对于长度为6的序列<2,7,3,4,8,5>,它的最长上升子序列为<2,3,4,5>,但如果限制一定要包含第2个元素,那么满足此要求的最长上升子序列就只能是<2,7,8>了。

输入数据第一行为两个整数N,K,如上所述。

接下来是N个整数,描述一个序列。

输出数据请输出一个整数,即包含第K个元素的最长上升子序列长度。

样例输入8 665 158 170 299 300 155 207 389输出4数据范围对于所有的数据,满足0<n<=200000,0<k<=n< p="">3、最短回文串(palindrome.pas/c/cpp)如果一个字符串正过来读和倒过来读是一样的,那么这个字符串就被称作回文串。

动态规划讲解大全(含例题及答案)

动态规划讲解大全(含例题及答案)
基本模型
多阶段决策过程的最优化问题。 在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在 它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果。当然,各个阶段决策的选取不 是任意确定的,它依赖于当前面临的状态,又影响以后的发展,当各个阶段决策确定后,就组成一个 决策序列,因而也就确定了整个过程的一条活动路线,如图所示:(看词条图) 这种把一个问题看作是一个前后关联具有链状结构的多阶段过程就称为多阶段决策过程,这种问 题就称为多阶段决策问题。
在前面的例子中,第一个阶段就是点 A,而第二个阶段就是点 A 到点 B,第三个阶段是点 B 到点 C,而第四个阶段是点 C 到点 D。
状态:状态表示每个阶段开始面临的自然状况或客观条件,它不以人们的主观意志为转移,也称 为不可控因素。在上面的例子中状态就是某阶段的出发位置,它既是该阶段某路的起点,同时又是前 一阶段某支路的终点。
fout.close(); return 0; }
USACO 2.3 Longest Prefix
题目如下: 在生物学中,一些生物的结构是用包含其要素的大写字母序列来表示的。生物学家对于把长的序 列分解成较短的(称之为元素的)序列很感兴趣。 如果一个集合 P 中的元素可以通过串联(允许重复;串联,相当于 Pascal 中的 “+” 运算符) 组成一个序列 S ,那么我们认为序列 S 可以分解为 P 中的元素。并不是所有的元素都必须出现。 举个例子,序列 ABABACABAAB 可以分解为下面集合中的元素: {A, AB, BA, CA, BBC} 序列 S 的前面 K 个字符称作 S 中长度为 K 的前缀。设计一个程序,输入一个元素集合以及一 个大写字母序列,计算这个序列最长的前缀的长度。 PROGRAM NAME: prefix INPUT FORMAT 输入数据的开头包括 1..200 个元素(长度为 1..10 )组成的集合,用连续的以空格分开的字 符串表示。字母全部是大写,数据可能不止一行。元素集合结束的标志是一个只包含一个 “.” 的行。 集合中的元素没有重复。接着是大写字母序列 S ,长度为 1..200,000 ,用一行或者多行的字符串 来表示,每行不超过 76 个字符。换行符并不是序列 S 的一部分。 SAMPLE INPUT (file prefix.in) A AB BA CA BBC . ABABACABAABC OUTPUT FORMAT 只有一行,输出一个整数,表示 S 能够分解成 P 中元素的最长前缀的长度。 SAMPLE OUTPUT (file prefix.out) 11 示例程序如下: #include <stdio.h>

动态规划习题集全

动态规划习题集全

动态规划专题训练护卫队【问题描述】护卫车队在一条单行的街道前排成一队,前面河上是一座单行的桥。

因为街道是一条单行道,所以任何车辆都不能超车。

桥能承受一个给定的最大承载量。

为了控制桥上的交通,桥两边各站一个指挥员。

护卫车队被分成几个组,每组中的车辆都能同时通过该桥。

当一组车队到达了桥的另一端,该端的指挥员就用电话通知另一端的指挥员,这样下一组车队才能开始通过该桥。

每辆车的重量是已知的。

任何一组车队的重量之和不能超过桥的最大承重量。

被分在同一组的每一辆车都以其最快的速度通过该桥。

一组车队通过该桥的时间是用该车队中速度最慢的车通过该桥所需的时间来表示的。

问题要求计算出全部护卫车队通过该桥所需的最短时间值。

【输入格式】输入文件中的第一行包含三个正整数(用空格隔开),第一个整数表示该桥所能承受的最大载重量(用吨表示),第二个整数表示该桥的长度(用千米表示),第三个整数表示该护卫队中车辆的总数(n<1000)。

接下来的几行中,每行包含两个正整数W和S(用空格隔开),W表示该车的重量(用吨表示),S表示该车过桥能达到的最快速度(用千米/小时表示)。

车子的重量和速度是按车子排队等候时的顺序给出的。

【输出格式】输出文件中应该是一个实数,四舍五入精确到小数点后1位,表示整个护卫车队通过该桥所需的最短时间(用分钟表示)。

【输入输出样例】输入:100 5 1040 2550 2050 2070 1012 509 7049 3038 2527 5019 70输入:75.0DOLLARS【问题描述】在以后的若干天里戴维将学习美元与德国马克的汇率。

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

【输入格式】输入文件中的第一行是一个自然数N(1<=N<=100),表示戴维学习汇率的天数。

接下来的N行中每行是一个自然数A(1<=A<=1000)。

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

动态规划算法题(5题)

动态规划算法题(5题)

动态规划算法题(5题)1、题⽬描述(⽹易)有 n 个学⽣站成⼀排,每个学⽣有⼀个能⼒值,⽜⽜想从这 n 个学⽣中按照顺序选取 k 名学⽣,要求相邻两个学⽣的位置编号的差不超过d,使得这 k 个学⽣的能⼒值的乘积最⼤,你能返回最⼤的乘积吗?输⼊描述:每个输⼊包含 1 个测试⽤例。

每个测试数据的第⼀⾏包含⼀个整数 n (1 <= n <= 50),表⽰学⽣的个数,接下来的⼀⾏,包含 n 个整数,按顺序表⽰每个学⽣的能⼒值 ai(-50 <= ai <= 50)。

接下来的⼀⾏包含两个整数,k 和 d (1 <= k <= 10, 1 <= d <= 50)。

输出描述:输出⼀⾏表⽰最⼤的乘积。

试题分析:本题要使⽤动态规划来解,动态规划的特点:1.求解的是最优化问题;2.可以分解为最优⼦结构本题可以先求解在第i个学⽣的位置下,j(j<K)个学⽣的能⼒值的最⼤值,得到所有学⽣位置下j个学⽣的能⼒值的最⼤值;在j个学⽣的情况下,得到j+1个学⽣的最⼤值,样例输出: 10 8 7 2 -7 9 5 4 10 -7 1 3 3输出: 630如上,第⼀步先计算k=2的情况:7:在d=3的情况下,最⼤最⼩值都为562:在d=3的情况下,最⼤值为16,最⼩值为14-7:在d=3的情况下,最⼤值为-14,最⼩值为-56......得到第⼀趟的结果k=3的情况下(这⾥以第⼀趟的结果为基础,只有这样就不需要考虑第⼀趟中d=3的限制):2:在d=3的情况下,最⼤最⼩值都为112(56*2)-7:在d=3的情况下,最⼤值为-98(14*-7)最⼩值为-392(56*-7)9:在d=3的情况下,最⼤值为504(56*9)最⼩值为-504(-56*9)......得到第⼆趟的结果返回最⼤值就是最后的结果#-*- coding:utf-8 -*-n=input()array=[int(i) for i in raw_input().split()]k,d=[int(i) for i in raw_input().split()]# n=36array_max=array_min=array#轮询k-1趟即可for i in range(0,k-1):_max=[-float('inf')]*n#将最⼤值的数组赋值⽆穷⼩_min=[float('inf')]*n#将最⼩值的数组赋值⽆穷⼤for j in range(i+1,n):if j<=d+i:#下⾯对应的min、max都是考虑到array[j]为负值的情况下temp_max = max(max(ii*array[j] for ii in array_max[i:j]),max(ii*array[j] for ii in array_min[i:j]))temp_min = min(min(ii*array[j] for ii in array_max[i:j]),min(ii*array[j] for ii in array_min[i:j]))else:temp_max = max(max(ii*array[j] for ii in array_max[j-d:j]),max(ii*array[j] for ii in array_min[j-d:j]))temp_min = min(min(ii*array[j] for ii in array_max[j-d:j]),min(ii*array[j] for ii in array_min[j-d:j]))_max[j]=temp_max_min[j]=temp_minarray_max=_maxarray_min=_minprint array_maxprint array_minprint max(array_max)2、题⽬描述(腾讯):腾讯⼤厦有39层,你⼿⾥有两颗⼀抹⼀眼的玻璃珠。

动态规划例题

动态规划例题

1.某企业生产某种产品,每月月初按定货单发货,生产得产品随时入库,由于空间限制,仓库最多能够贮存产品90000件。

在上半年(1至6月)其生产成本(万元/千件)和产6个月的生产量使既能满足各月的订单需求同时生产成本最低?参考解答:(1) 首先建模描述为动态规划问题●阶段k:月份,k=1,2, (7)●状态变量x k:第k个月初(发货以前)的库存量;●决策变量d k:第k个月的生产量;●状态转移方程:x k+1=x k-R k+d k;●决策允许集合:D k(x k)={d k| d k≥0, R k+1≤x k+1≤90千件}={d k | d k≥0, R k+1≤x k-R k+d k≤ 90千件};●阶段指标:v k(x k,d k)=C k d k;●终端条件:f7(x7)=0, x7=40;(2) 计算过程:对于k = 6因为x7 =40,x6 - r6 + d6 = x7 = 40因此d6 = x7+r6-x6 = 40 +44 - x6 = 84 - x6是唯一的决策,于是递推方程为:f6(x6) = min { c6d6+f7(x7) }d6=84 - x6=2.5 d6=2.5 (84 - x6)=210 – 2.5x6注意:由于d6 =84 - x6 ≥ 0,故x6 ≤ 84;对于k = 5:d5∈D5(x5) ={d5| d5≥0, 111-x5≤d5≤(84+67)151 - x5} (x5 ≤ 90)f5(x5) = min { c5d5 + f6(x6) }= min { 2.0d5+210 – 2.5 x6 }= min { 2.0d5+210 – 2.5 (x5-67+d5) }= min { -0.5d5 - 2.5 x5 + 377.5 } d5*= 151 - x5= -0.5(151 - x5) – 2.5 x5+377.5= 302 -2.0x5对于k=4:d4∈D4(x4) = {d4| d4≥0, 99 - x4≤d4 ≤122 - x4 }f4(x4) = min { c4d4+f5(x5) }= min { 2.7d4 + 302 - 2.0x5 }= min { 2.7d4 + 302 -2.0(x4-32+d4)}= min { 0.7d4 – 2.0x4 + 366 } d4= 99 - x4 (x4 ≤ 90)= 435.3 - 2.7x4对于k=3:d3∈D3(x3) = {d3| d3≥0, 82-x3≤d3≤140 - x3 }f3(x3) = min {c3d3+f4(x4)}= min {2.3d3+435.3 – 2.7 (x3-50+d3)}= min { -0.4d3 – 2.7x3 + 570.3 } d3*=140 - x3= 514.3 - 2.3 x3对于k=2:d2∈D2(x2) = {d2| d2≥0,113 - x2≤d2≤153 - x2}f2(x2) = min { c2d2 + f3(x3) }= min {2.8d2+514.3 - 2.3 (x2-63+d2)}= min { 0.5d2 – 2.3x2 + 659.2 } d2* = 113-x2= 715.7 – 2.8x2对于k=1:d1∈D1(x1) = {d1|d1≥0,98 - x1≤d1≤125 - x1} = { d1| 58 ≤d1 ≤ 85 } f1(x1) = min {c1d1+f2(x2)}= min { 2.1d1+715.7 – 2.8 (x1-35+d1)}= min {-0.7d1 – 2.8x1+813.7} d1 = 85,x1=40= 642.2(3) 最优解:x1 = 40, d1 = 85, x2 = 90, d2 = 23, x3 = 50, d3 = 90;x4 = 90, d4 = 9, x5 = 67, d5 = 84, x6 = 84, d6 = 02.有一种设备最长使用3年时间,现考虑它在3年的更新问题,在每年年初要作出决策是继续使用还是更新。

第3章-动态规划-习题

第3章-动态规划-习题

租用游艇问题
长江游艇俱乐部在长江上设置了n 个游艇出租站1, , , 长江游艇俱乐部在长江上设置了 个游艇出租站 ,2,…, n。游客可在这些游艇出租站租用游艇,并在下游的任何 。游客可在这些游艇出租站租用游艇, 一个游艇出租站归还游艇。游艇出租站i 到游艇出租站j 一个游艇出租站归还游艇。游艇出租站 到游艇出租站 之 间的租金为r(i,j),1≤i<j≤n。试设计一个算法,计算出从游 间的租金为 。试设计一个算法, 艇出租站1 到游艇出租站n 所需的最少租金。 艇出租站 到游艇出租站 所需的最少租金。 编程任务: 编程任务: 对于给定的游艇出租站i 到游艇出租站j 对于给定的游艇出租站 到游艇出租站 之间的租金为 r(i,j),1≤i<j≤n,编程计算从游艇出租站 到游艇出租站 所 ,编程计算从游艇出租站1 到游艇出租站n所 需的最少租金。 需的最少租金。
10
编辑距离问题
a f x p i u
长度: 长度:n
m
长度: 长度:m
b
x
w
r
s
d
1
2
3
4
5
删除一个字符: 删除一个字符: 插入一个字符: 插入一个字符: 将一个字符改为另一个字符: 将一个字符改为另一个字符:
y z
del (δ)
11
编辑距离问题
char a[100],b[100]; scanf("%s%s", a, b); x w r int m = strlen(a); i d[1] d[2] d[3] int n = strlen(b); f 1 1 2 3 int d[101]; int i, j; x 2 1 2 3 for (i=1; i<=n; i++) d[i] = i; p 3 2 2 3 for (i=1; i<=m; i++) { i 4 3 3 3 int y = i-1; for (j=1; j<=n; j++) { u 5 4 4 4 int x = y; m 6 5 5 5 y = d[j]; int z = j>1?d[j-1]:i; int del = a[i-1]==b[j-1]?0:1; d[j] = min(x+del, y+1, z+1); } 删除一个字符: y 删除一个字符: } 插入一个字符: z 插入一个字符: printf("%d\n",d[n]); 将一个字符改为另一个字符: 将一个字符改为另一个字符: del (δ) 12 s d[4] 4 4 4 4 4 5

动态规划训练题目

动态规划训练题目

动态规划题目【引例1、上楼梯】一个含有n阶的楼梯,一次可以走1阶或2阶,从底走到顶一共有几种走法?n<=90。

【引例2、数字三角形】a1有一个数字三角形,编程求从最顶层到最底层的一条路所经过位置上数字之和的最大值。

每一步只能向左下或右下方向走。

下图数据的路应为7->3->8->7->5,和为30。

输入:文件输入(从键盘读入文件名),文件格式:第一行:R(1<=R<=10000),数字三角形共有R行;以下R行:依次表示数字三角形中每行中的数字。

每个数都是非负的,且<=100.输出:一个正整数,路径上数字之和的最大值。

输入样例:573 88 1 02 7 4 44 5 2 6 5输出样例:30【引例3、求最大连续子序列的和。

】a2输入:第一行:n(N<500)第二行:n个整数(-3000,3000)。

输出:最大连续子序列的和。

样例:输入:7-6 4 -1 3 2 -3 2输出:81、最长递增序列b1设有整数序列b1,b2,b3,…,bm,若存在i1<i2<i3<…<in,且bi1<bi2<bi3<…<bin,则称b1,b2,b3,…,bm 中有长度为n的递增序列bi1,bi2,bi3,…,bin。

求序列b1,b2,b3,…,bm中最大递增序列长度(n)。

输入:m(<1000),整数序列输出:最大长度n样例:输入:7-6 4 -1 3 8 -3 2输出:42、背包问题b2设有n种物品,每种物品有一个重量及一个价值。

同时有一个背包,最大载重量为W,今从n种物品中选取若干件,使其重量的和小于等于W,而价值的和为最大。

输入数据:第一行两个数:物品总数N(<100),背包载重量W(<100);两个数用空格分隔;第二行N个数,为N种物品重量Wi;两个数用空格分隔;第三行N个数,为N种物品价值Vi; 两个数用空格分隔;输出数据:第一行总价值;输入样例:4 103 4 5 77 15 20 25输出样例:353、迷宫寻宝b3一个n行m列的迷宫(1<=n,m<=50),入口在左上角,规定只能向下或向右走。

动态规划习题

动态规划习题

习题6-1. 考虑下面的网络图,箭头上的数字代表相连两个节点之间的距离。

(1)用动态规划找出从节点1到节点10的最短路。

(2)从节点4到节点10的最短路呢?6-2. 从北京到上海的包机的剩余装载能力为2000kg ,某一运输公司现有4种货物需要从北京运输到上海。

每种货物的单位、单位重量和单位运输费用如下表所示。

(1)用动态规划找出包机应该运输的每种货物的单位数。

(2)假设包机同意装载另一批货物,剩余装载能力降为1800kg ,计算结果会怎样变化?6-3. 假定有一个3阶段的过程,每一阶段的产量是需要做出决策的函数。

使用数学符号,问题表述如下:Max ()()()332211d r d r d r ++ s.t.1000321≤++d d d 每个阶段的决策变量和相应的返回值如下所示:6-4. 某制造公司为一家汽车工厂提供发动机的部件,以下是3个月的生产计划的数据。

量是10单位,并且生产批量是10的倍数(例如,10,20或者30单位)。

6-5. 某物流公司雇佣了8名新员工,现决定如何把他们分配到4项作业上。

公司给出了以下每项作业分配不同的作业人员的估计利润表。

(1) 用动态规划决定每项作业应该分配的新员工数目。

(2) 如果公司只雇佣了6名新员工,应该把这些员工分配给哪些作业?6-6. 一个锯木厂采购了一批20ft 长的原木,想要把这些原木切成更短的原木,然后把切后的小原木卖给制造公司。

制造公司已经订购了一批4种尺寸的原木:l 1=3ft ,l 2=7ft ,l 3=11ft ,l 4=16ft 。

锯木厂现在有2000个长度为20ft 的原木的库存,并希望有选择地裁截原木以最大化利润。

假定锯木厂的订单是无限的,唯一的问题就是确定把现有原木裁成的类型以最大化利润。

原木的利润如下表所示:任何裁截类型的长度限制如下:201173321≤++d d d 其中,i d 是长度为i l 的类型的裁截数目,4,3,2,1=i .(1)为这个问题建立动态规划模型,并使用模型解决问题。

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

动态规划习题Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】动态规划专题分类视图数轴动规题:题1.2001年普及组第4题--装箱问题【问题描述】有一个箱子容量为V(正整数,0≤V≤20000),同时有n个物品(0<n≤30),每个物品有一个体积(正整数)。

要求从n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。

【输入格式】输入文件box.in有若干行。

第一行:一个整数,表示箱子容量V;第二行:一个整数,表示物品个数n;接下来n行,分别表示这n个物品的各自体积。

【输出格式】输出文件box.out只有一行数据,该行只有一个数,表示最小的箱子剩余空间。

【输入样例】2468312797【输出样例】题2.1996年提高组第4题--砝码秤重__数据加强版【问题描述】设有n种砝码,第k种砝码有Ck 个,每个重量均为Wk,求:用这些砝码能秤出的不同重量的个数,但不包括一个砝码也不用的情况。

【输入格式】输入文件weight.in的第一行只有一个数n,表示不同的砝码的种类数.第2行至第n+1行,每行有两个整数.第k+1行的两个数分别表示第k种砝码的个数和重量.【输出格式】输出文件weight.out中只有一行数据:Total=N。

表示用这些砝码能秤出的不同重量数。

【输入样例】22223【输出样例】Total=8【样例说明】重量2,3,4,5,6,7,8,10都能秤得【数据限制】对于100%的数据,砝码的种类n满足:1≤n≤100;对于30%的数据,砝码的总数量C满足:1≤C≤20;对于100%的数据,砝码的总数量C满足:1≤C≤100;对于所有的数据,砝码的总重量W满足:1≤W≤400000;题3.石子归并-szgb.pas【问题描述】有一堆石头质量分别为W1,W2,…,Wn.(Wi≤10000),将石头合并为两堆,使两堆质量的差最小。

【输入】输入文件szgb.in的第一行只有一个整数n(1≤n≤50),表示有n堆石子。

接下去的n行,为每堆石子质量。

【输出】输出文件szgb.out的只有一行,该行只有一个整数,表示最小的质量差.【样例输入】558132714【样例输出】3题4.补圣衣【问题描述】有四个人,每人身上的衣服分别有s1,s2,s3和s4处破损,而且每处破损程度不同,破损程度用需修好它用的时间表示(A1...As1,B1...Bs2,C1...Cs3,D1...Ds4)。

不过你可以同时修补2处破损。

但是这2处破损,只能是同一件衣服上的。

就是说你只能同时修补一件衣服,修好了,才能修补下一件。

【输入】本题包含5行数据:第1行,为s1,s2,s3,s4(1≤s1,s2,s3,s4≤20)第2行,为A1...As1共s1个数,表示第一件衣服上每个破损修好它所需的时间第3行,为B1...Bs2共s2个数,表示第二件衣服上每个破损修好它所需的时间第4行,为C1...Cs3共s3个数,表示第三件衣服上每个破损修好它所需的时间第5行,为D1...Ds4共s4个数,表示第四件衣服上每个破损修好它所需的时间(1≤A1...As1,B1...Bs2,C1...Cs3,D1...Ds4≤60)【输出】输出一行,为修好四件衣服所要的最短时间。

【样例输入】12135436243【样例输出】20题5.光光的作业homework.pas/homework.exe【问题描述】光光上了高中,科目增多了。

在长假里,光光的老师们都非常严厉,都给他布置了一定量的作业。

假期里,光光一共有的时间是k小时。

在长假前,老师们一共给光光布置了n份作业,第i份作业需要的时间是ti小时。

但是由于老师们互相不商量,因此光光有可能不能完成老师的作业。

当不能完成老师的作业时,光光就事后去向老师说明,然后被老师批评一顿了事。

对于一件作业,只有2种情况:完成或者不完成(快要完成也算不完成)。

如果没完成,受到批评是天经地义的。

但是,不同的作业对于光光来说,批评的力度是不同的。

第i件作业如果没完成,就要受到pi个单位的批评。

多次这样之后,光光想要在长假前就知道他至少会受到多少个单位的批评。

你能帮助他吗?【输入】输入文件homework.in包含以下内容:第一行只有一个数字k,表示光光一共有的时间数;第二行只有一个数字n,表示作业数;接下来n行,每行两个数字,分别是ti 和pi,两个数字之间用一个空格分开。

【输出】输出文件homework.out只包含一行,该行只有一个数字,代表了光光最少受到的批评。

【样例输入】53261347【样例输出】6【数据规模约定】100%的数据中,k≤100000,ti≤10000,pi≤10000;30%的数据中,n≤20;100%的数据中,n≤500;题7.打包[pack.pas/pack.c/pack.cpp]2006年OIBH新年赛【问题描述】你现在拿到了许多的礼物,你要把这些礼物放进袋子里。

你只有一个最多装下V体积物品的袋子,你不能全部放进去。

你也拿不动那么重的东西。

你估计你能拿的最大重量为G。

现在你了解了每一个物品的完美值、重量和体积,你当然想让袋子中装的物品的完美值总和最大,你又得计划一下了。

【输入】第一行:G和V表示最大重量和体积。

第二行:N表示拿到N件礼物。

第三到N+2行:每行3个数TiGiVi表示各礼物的完美值、重量和体积【输出】输出共一个数,表示可能获得的最大完美值。

【输入输出样例】输入(pack.in):6541022203240433033输出(pack.out):50【数据范围】对于20%的数据N,V,G,Ti,Vi,Gi≤10对于50%的数据N,V,G,Ti,Vi,Gi≤100对于80%的数据N,V,G,Ti,Vi,Gi≤30080%到100%的数据是N,V,G,Ti,Vi,Gi≤380的离散随机数据。

较复杂的数轴动规题6.挤牛奶-同济ACM第1132题Problem小卡卡终于帮农夫John找到了走丢的那一头奶牛,John为了感谢小卡卡,不仅告诉了他在Pascal山脉上可能存在Pascal圣地最大的宝藏,还说要请小卡卡喝牛奶。

可是农夫John发现他家里所储藏的牛奶已经喝光了,所以要临时给奶牛挤奶。

小卡卡实在是太好心了,说要帮农夫John一起挤牛奶。

John答应了,他把他的n头奶牛中的n/2头(n是个偶数)分给小卡卡挤,他自己挤剩下的n/2头奶牛。

但是每一头奶牛都有不同的产奶量,农夫John为了让小卡卡减轻负担,他希望他们两个所挤的牛奶的总量之差最小。

小卡卡得知了每头奶牛的产奶情况之后很快就解决了这个问题。

Input测试数据第一行一个整数n,n为偶数且小于100。

表示有n头奶牛。

第二行n个整数分别给出每头奶牛的产奶量(产奶量的总和不超过2000)。

Output输出小卡卡和农夫所挤的牛奶量的最小差值。

SampleInput6792642SampleOutput题8.一般性的最少硬币组成问题coinYB.pas/coinYB.exe从n种币值为a[1..n]的硬币中,任选几个硬币组成价值为V的一堆货币,问最少需要几个硬币?其中每种硬币的数量没有限制。

1<=n<=100,1<=v<=100000,1<=a[i]<=100000输入文件coinYB.in中有两行:第一行有两个数v和n;第二行有n个以空格分隔的数,表示n个币值.输出文件coinYB.out中只有一行,该行只有一个数,表示所需的最少硬币数, 如果无论如何选取硬币,均不能得到币值v,则输出0.题9.多个公司间的机器分配问题已知第j个公司使用k台机器时,能得到的利润为a[j,k],问如何将m台机器在n个公司中分配,才能获得最大利润?要求输出能获得的最大利润及方案.将3台机器分配给2个最大盈利为6,方案为公司2使用2台,公司1使用1台.题10.2001年浙江省队选拔---积木城堡castle.pas(castle.exe)小XC 发现垒城堡的时候,如果下面的积木比上面的积木大,那么城堡便不易倒。

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

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

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

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

所以他现在要改造城堡。

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

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

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

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

输入文件castle.in 第一行是一个整数N(N<=100),表示一共有几座城堡。

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

用-1结束。

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

输出文件castle.out 一个整数,表示最后城堡的最大可能的高度。

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

输入样例 221–1 321–1 输出样例 3题11.生物基元问题一个生物体的结构可以用“基元”的序列表示,一个“基元"用一些英文字符串表示。

对于一个基元集合P,可以将字符串S 看作由n 个基元P1,P2,…,Pn 依次连接而成的。

问题是给定一个字符串S 和一个基元集合P,使S 的前缀可由P 中的基元组成。

求这个前缀的最大长度。

基元的长度最大为20,字符中的长度最大为500000.例如基元集合为{A,AB ,BBC ,CA },字符串为AB A CA BBC AACCB,则最大长度为10,其具体组成为题12.双塔 2001年9月11日,一场突发的灾难将纽约世界贸易中心大厦夷为平地,Mr.F 曾亲眼目睹了这次灾难。

为了纪念“911”事件,Mr.F 决定自己用水晶来搭建一座双塔。

Mr.F 有N 块水晶,每块水晶有一个高度,他想用这N 块水晶搭建两座有同样高度的塔,使他们成为一座双塔,Mr.F 可以从这N 块水晶中任取M (1≤M ≤N )块来搭建。

但是他不知道能否使两座塔有同样的高度,也不知道如果能搭建成一座双塔,这座双塔的最大高度是多少。

所以他来请你帮忙。

给定水晶的数量N (1≤N ≤100)和每块水晶的高度Hi (N 块水晶高度的总和不超过2000),你的任务是判断Mr.F 能否用这些水晶搭建成一座双塔(两座塔有同样的高度),如果能,则输出所能搭建的双塔的最大高度,否则输出“Impossible ”。

相关文档
最新文档