动态规划题库

合集下载

投资问题(动态规划)

投资问题(动态规划)

投资问题(动态规划)1. 问题设m元钱,n项投资,函数fi(x)表⽰将x元投⼊第i项项⽬所产⽣的效益,i=1,2,...,n.问:如何分配这m元钱,使得投资的总效益最⾼?2. 解析 我们维护⼀个⼆维数组dp,dp[i][j]表⽰前i个项⽬投资j元钱的最⼤效益,使⽤动态规划时,考虑如何将问题划分成⼦问题,我们可以先从第⼀个项⽬考虑,然后考虑前两个项⽬,然后前三个项⽬,到第m个项⽬时,为m分配x元钱,n-x元钱的最⼤效益为dp[m-1][n-x],这样我们可以得到递推⽅程: dp[x][y]=max{f(x,i)+dp[x-1][y-i]}(i的取值[0,y])3. 设计for (int i = 1; i <= n; i++) {for (int j = 0; j <= money; j++) {dp[i][j] = 0;for (int k = 0; k <= j; k++) {if (dp[i][j] < f[i][k] + dp[i - 1][j - k])dp[i][j] = f[i][k] + dp[i - 1][j - k]; }}}4. 分析5. 源码#include <iostream>#include <math.h>using namespace std;const int M = 5;const int N = 6;int MaxProfit(int dp[M][N],int f[M][N],int n,int money) {for (int i = 1; i <= n; i++) {for (int j = 0; j <= money; j++) {dp[i][j] = 0;for (int k = 0; k <= j; k++) {if (dp[i][j] < f[i][k] + dp[i - 1][j - k])dp[i][j] = f[i][k] + dp[i - 1][j - k];}}}return dp[n][money];}int main() {int dp[M][N] = { 0 };int f[M][N] = { 0,0,0,0,0,0,0,11,12,13,14,15,0,0,5,10,15,20,0,2,10,30,32,40,0,20,21,22,23,24};cout << MaxProfit(dp, f, 4, 5);return0;}。

动态规划建模题

动态规划建模题

1.假设某厂生产的某种产品,以后四个月的订单如下表所示,合同规定在月底前交货,生产每批产品的固定成本为3千元,每批生产的产品的数量不限。

每件产品的可变成本为1千元,每批产品的最大生产能力为5件。

产品每件每月的存储费用为0.5千元。

设1月初有库存1件,4月底不再留下产品。

试在满足需要的前提下,如何组织生产才能使总的成本费用最低。

2.假设某部门根据国家计划的安排,拟将某种高效率的5台设备分配给所属的甲、乙、丙三个工厂,各工厂在获得这些设备后可获得的利润如下表:3. 某建筑公司拟建造甲乙丙三类住宅出售,甲类住宅每栋耗费100万元,售价200万元,乙类住宅每栋耗资60万元,售价110万元,丙类住宅每栋耗资30万元,售价70万元。

由于某种限制,建造每类住宅不得超过3栋。

该公司拥有建房资金350万元,问应当如何安排资金可使该公司的住房收益最大。

4. 假设某人登山有3种物品可供选择,三种物品分别用1,2,3表示,这三种物品在登山过程中的价值以及每种物品每一件的重量如下表所示,现已知由于条件限制该人背包中物品的数量不能超过10公斤,试给出这个人的物品携带方案使得物品的总价值达到最大。

5.6. 某机器可以在高低两种不同的负荷下进行生产,设机器在高负荷下生产的产量函数为g(x)=8x,其中x为投入高负荷生产的机器数量,年完好率a=0.7,在低负荷下生产的产量函数为h(y)=5y,其中y为投入低负荷生产的机器数量,年完好率b=0.9。

假定开始时完好机器的数量为S1=1000台,问每年应该如何安排机器在高低负荷下的生产使得在五年内生产产品的总产量最高?7.某车间需要按月在月底供应一定数量的某种部件给总装车间。

由于生产条件的变化,该车间在各月份中生产每单位这种部件所需消耗的工时不同,各月份生产的产品于当月月底前全部要存入仓库以备后用。

已知总装车间在各个月份的需求量以及在加工车间生产该部件每单位数量所需要的工时数如下表所示。

动态规划练习例题

动态规划练习例题
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)

动态规划47题

动态规划47题

动态规划练习【题目一览】总分【问题描述】学生在我们USACO的竞赛中的得分越多我们越高兴。

我们试着设计我们的竞赛以便人们能尽可能的多得分,这需要你的帮助。

我们可以从几个种类中选取竞赛的题目,这里的一个“种类”是指一个竞赛题目的集合,解决集合中的题目需要相同多的时间并且能得到相同的分数。

你的任务是写一个程序来告诉USACO的职员,应该从每一个种类中选取多少题目,使得解决题目的总耗时在竞赛规定的时间里并且总分最大。

输入包括竞赛的时间M(1<=M<=10000)(不要担心,你要到了训练营中才会有长时间的比赛)和“种类”的数目N(1<=N<=10000)。

后面的每一行将包括两个整数来描述一个“种类”:第一个整数说明解决这种题目能得的分数(1<=points<=10000),第二整数说明解决这种题目所需的时间(1<=minutes<=10000)。

你的程序应该确定我们应该从每个“种类”中选多少道题目使得能在竞赛的时间中得到最大的分数。

来自任意的“种类”的题目数目可能任何非负数(0或更多)。

计算可能得到的最大分数。

【输入格式】输入文件中的第1行:M,N--竞赛的时间和题目“种类”的数目。

第2~N+1行:两个整数:每个“种类”题目的分数和耗时。

【输出格式】输出文件中仅一行,包括那个在给定的限制里可能得到的最大的分数。

【输入输出样例】输入:300 4100 60250 120120 10035 20输出:605从第2个“种类”中选两题第4个“种类”中选三题。

邮票【问题描述】已知一个N枚邮票的面值集合(如,{1分,3分})和一个上限K——表示信封上能够贴K张邮票。

计算从1到M的最大连续可贴出的邮资。

例如,假设有1分和3分的邮票;你最多可以贴5张邮票。

很容易贴出1到5分的邮资(用1分邮票贴就行了),接下来的邮资也不难:6 = 3 + 37 = 3 + 3 + 18 = 3 + 3 + 1 + 19 = 3 + 3 + 310 = 3 + 3 + 3 + 111 = 3 + 3 + 3 + 1 + 112 = 3 + 3 + 3 + 313 = 3 + 3 + 3 + 3 + 1然而,使用5枚1分或者3分的邮票根本不可能贴出14分的邮资。

动态规划例题

动态规划例题

动态规划例题动态规划是一种以最优化原理为基础的问题求解方法,通过拆分问题为若干阶段,每个阶段求解一个子问题,再逐步推导出整个问题的最优解。

例如,有一个背包能够承受一定的重量,现有一些物品,每个物品都有自己的重量和价值。

我们希望将物品放入背包中,使得背包的总价值最大。

这个问题可以用动态规划来解决。

首先,我们定义一个二维数组dp,其中dp[i][j]表示在前i个物品中,容量为j的背包中所能放入的物品的最大价值。

那么,对于每一个物品,可以选择放入背包或者不放入背包。

如果选择放入背包,最大价值为dp[i-1][j-w[i]] + v[i],其中w[i]表示第i个物品的重量,v[i]表示第i个物品的价值。

如果选择不放入背包,最大价值为dp[i-1][j]。

因此,dp[i][j]的状态转移方程为:dp[i][j] = max(dp[i-1][j-w[i]] + v[i], dp[i-1][j])。

基于这个状态转移方程,可以逐步求解从第1个物品到第n个物品的最大价值。

最终,dp[n][W]即为问题的最优解,其中W 表示背包的容量。

举个简单的例子,假设背包的容量为10,有3个物品,它们的重量分别为3、4、5,价值分别为4、5、6。

此时,可以得到如下的dp矩阵:0 0 0 0 0 0 0 0 0 0 00 0 0 4 4 4 4 4 4 4 40 0 0 4 5 5 9 9 9 9 90 0 0 4 5 5 9 10 10 14 14我们可以看到,dp[3][10]的最大价值为14,表示在前3个物品中,容量为10的背包中所能放入的物品的最大价值为14。

通过动态规划,我们可以有效地求解背包问题,得到物品放入背包的最优解。

这个例子只是动态规划的一个简单应用,实际上,动态规划可以解决各种复杂的问题,如最长公共子序列、最大子数组和、最大字段和等。

因此,学习动态规划是非常有意义的。

动态规划练习题及解答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)。

动态规划试题

动态规划试题

1. 某公司打算向它的三个营业区增设6个销售店,每个营业区至少增设1个。

各营业区每年增加的利润与增设的销售店个数有关,具体关系如表1所示。

试规划各营业区应增设销售店的个数,以使公司总利润增加额最大。

表1解:将问题按区分为三个阶段3,2,1=k ,设状态变量k S (3,2,1=k )代表从第k 个区到第3个区的增设个数,决策变量k x 代表第k 个区的增设个数。

于是有状态转移率k k k x S S -=+1、允许决策集合}0|{)(k k k k k S x x S D ≤≤=和递推关系式:)}()({max )(10k k k k k S x k k x S f x g S f kk -+=+≤≤ )1,2,3(=k0)(44=S f当3=k 时:)}({max }0)({max )(330330333333x g x g S f S x S x ≤≤≤≤=+=于是有表7-2,表中*3x 表示第三个阶段的最优决策。

单位:百万元当2=k 时:)}()({max )(2232202222x S f x g S f S x -+=≤≤于是有表7-3。

表7-3 (单位:百万元)当1=k 时:)}()({max )(1121101111x S f x g S f S x -+=≤≤于是有表7-4。

故最优分配方案为:A 区建3个销售店,B 区建2个销售店,C 区建1个销售店, 总利润为490万元。

2. 某工厂有100台机器,拟分4个周期使用,在每一周期有两种生产任务,据经验把机器投入第一种生产任务,则在一个周期中将有六分之一的机器报废,投入第二种生产任务,则有十分之一的机器报废。

如果投入第一种生产任务每台机器可收益1万元,投入第二种生产任务每台机器可收益0.5万元。

问怎样分配机器在4个周期内的使用才能使总收益最大? 解:阶段:将每个周期作为一个阶段,即k=1,2,3,4 状态变量:第k 阶段的状态变量k S 代表第k 个周期初拥有的完好机器数决策变量:决策变量k x 为第k 周期分配与第一种任务的机器数量,于是k k x S -该周期分配在第二种任务的机器数量。

c++动态规划试题+分析

c++动态规划试题+分析

我们设机器人走到(i,j) 位置时拾到最多垃圾数为 f[i][j] ,由于机器人只能朝右和下走, 只 会跟机器人上一位置拾到最多的垃圾数有关,因此很容易写出状态转移方程。 F[i][j]=max{f[i-1][j],f[i][j-1]}+a[i][j],(1<=i<=n,1<=j<=m) 初始值:f[1][i]=f[1][i-1]+a[1][i] ,f[i][1]=f[i-1][1]+a[i][1] 时间复杂度为:O(nm) 我们再来看第二问: 在最优解的情况下求方案总数, 我们只要每次在最优解的情况下统 计路径条数即可,见图 2: 设 g[i][j] 表示在位置(i,j)达到拾到 f[i][j]垃圾时的路径总数,有如下ቤተ መጻሕፍቲ ባይዱ程: g[i][j]=g[i-1][j]*x+g[i][j-1]*y 当 f[i][j]=f[i-1][j]+a[i][j] 时,x=1,否则 x=0; 当 f[i][j]=f[i][j-1]+a[i][j] 时,y=1,否则 y=0;
using namespace std; int n,m,a[200005],b[200005],f[200005]; void init() { int i,j=0; cin>>n>>m; for(i=1;i<=n;i++)cin>>a[i]; for(i=1;i<m;i++)if(a[i]<a[m])b[++j]=a[i];//去掉前面大于等于 a[m]的数 b[++j]=a[m]; for(i=m+1;i<=n;i++)if(a[i]>a[m])b[++j]=a[i];//去掉后面小于等于 a[m]的数 } int ERLIS()//上升子序列 { int i,L,r,mid,len=1; f[1]=b[1]; for(i=2;i<=n;i++) { L=1;r=len; if(f[len]<b[i]){len++;f[len]=b[i];continue;} while(L<=r) { mid=(L+r)/2; if(f[mid]<b[i])L=mid+1;else r=mid-1; } f[L]=b[i]; } return len; } int main() { init(); cout<<ERLIS()<<endl; } 3、采药 .cpp/c/pas) (medic medic.cpp/c/pas) 【问题描述】 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最 有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都 是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间, 每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果 你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。” 如果你是辰辰,你能完成这个任务吗? 【输入格式】 输入文件的第一行包含两个正整数 N,M。M 表示总共能够用来采药的时间,N 代表山 洞里的草药的数目。 接下来的 N 行每行包括两个的整数,分别表示采摘某株草药的时间 T i 和这株草药的价 值 V i。 【输出格式】 输出文件仅包含一个整数表示规定时间内可以采到的草药的最大总价值。 【样例输入输出】 medic .in medic .out medic.in medic.out 39 3 10 10 81 12 】 【数据规模和约定 数据规模和约定】 50%的数据中 N ,M≤1000;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

顺序对齐源程序名ALIGN.??? (PAS,C,CPP)可执行文件名ALIGN.EXE输入文件名ALIGN.IN输出文件名 ALIGN.OUT考虑两个字符串右对齐的最佳解法。

例如,有一个右对齐方案中字符串是AADDEFGGHC 和ADCDEGH。

AAD_DEFGGHCADCDE__GH_每一个数值匹配的位置值2分,一段连续的空格值-1分。

所以总分是匹配点的2倍减去连续空格的段数,在上述给定的例子中,6个位置(A,D,D,E,G,H)匹配,三段空格,所以得分2*6+(-1)*3=9,注意,我们并不处罚左边的不匹配位置。

若匹配的位置是两个不同的字符,则既不得分也不失分。

请你写个程序找出最佳右对齐方案。

输入输入文件包含两行,每行一个字符串,最长50个字符。

字符全部是大字字母。

输出一行,为最佳对齐的得分。

样例ALIGN.INAADDEFGGHCADCDEGHALIGN.OUT9_______________________________________________________________________________ 任务安排源程序名BATCH.??? (PAS,C,CPP)可执行文件名BATCH.EXE输入文件名BATCH.IN输出文件名 BATCH.OUTN个任务排成一个序列在一台机器上等待完成(顺序不得改变),这N个任务被分成若干批,每批包含相邻的若干任务。

从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是T i。

在每批任务开始前,机器需要启动时间S,而完成这批任务所需的时间是各个任务需要时间的总和(同一批任务将在同一时刻完成)。

每个任务的费用是它的完成时刻乘以一个费用系数F i。

请确定一个分组方案,使得总费用最小。

例如:S=1;T={1,3,4,2,1};F={3,2,3,3,4}。

如果分组方案是{1,2}、{3}、{4,5},则完成时间分别为{5,5,10,14,14},费用C={15,10,30,42,56},总费用就是153。

输入第一行是N(1<=N<=5000)。

第二行是S(0<=S<=50)。

下面N行每行有一对数,分别为T i和F i,均为不大于100的正整数,表示第i个任务单独完成所需的时间是T i及其费用系数F i。

输出一个数,最小的总费用。

样例BATCH.IN511 33 24 32 31 4BATCH.OUT153_______________________________________________________________________________ 最大的算式源程序名BIGEXP.??? (PAS,C,CPP)可执行文件名 BIGEXP.EXE输入文件名 BIGEXP.IN输出文件名 BIGEXP.OUT题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大。

因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号。

例如:N=5, K=2,5个数字分别为1、2、3、4、5,可以加成:1*2*(3+4+5)=241*(2+3)*(4+5)=45(1*2+3)*(4+5)=45……输入输入文件共有二行,第一行为两个有空格隔开的整数,表示N和K,其中(2<=N<=15, 0<=K<=N-1)。

第二行为 N个用空格隔开的数字(每个数字在0到9之间)。

输出输出文件仅一行包含一个整数,表示要求的最大的结果样例BIGEXP.IN5 21 2 3 4 5BIGEXP.OUT120说明(1+2+3)*4*5=120_______________________________________________________________________________ BLAST源程序名BLAST.??? (PAS,C,CPP)可执行文件名BLAST.EXE输入文件名BLAST.IN输出文件名 BLAST.OUT设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为“abcbcd”,则字符串“abcb□cd”,“□a□bcbcd□”和“abcb□cd□”都是X的扩展串,这里“□”代表空格字符。

如果A1是字符串A的扩展串,B1是字符串B的扩展串,A1与B1具有相同的长度,那么我们定义字符串A1与B1的距离为相应位置上的字符的距离总和,而两个非空格字符的距离定义为它们的ASCII码的差的绝对值,而空格字符与其它任意字符之间的距离为已知的定值K,空格字符与空格字符的距离为O。

在字符串A、B的所有扩展串中,必定存在两个等长的扩展串A1、B1,使得A1与B1之间的距离达到最小,我们将这一距离定义为字符串A、B的距离。

请你写一个程序,求出字符串A、B的距离。

输入输入文件第一行为字符串A,第二行为字符串B,A、B均由小写字母组成且长度均不超过2000,第三行为一个整数K,1≤K≤100,表示空格与其它字符的距离。

输出输出文件仅一行包含一个整数,表示要求的字符串A、B的距离。

样例BLAST.INcmcsnmn2BLAST.OUT10_______________________________________________________________________________ 书的复制源程序名BOOK.??? (PAS,C,CPP)可执行文件名 BOOK.EXE输入文件名BOOK.IN输出文件名BOOK.OUT现在要把M本有顺序的书分给K个人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一、第三、第四本数给同一个人抄写。

现在请你设计一种方案,使得复制时间最短。

复制时间为抄写页数最多的人用去的时间。

输入第一行两个整数M、K;(K<=M<=100)第二行M个整数,第i个整数表示第i本书的页数。

输出共K行,每行两个正整数,第i行表示第i个人抄写的书的起始编号和终止编号。

K行的起始编号应该从小到大排列,如果有多解,则尽可能让前面的人少抄写。

样例BOOK.IN9 31 2 3 4 5 6 7 8 9BOOK.OUT1 56 78 9_______________________________________________________________________________ 最小乘车费用源程序名BUSSES.??? (PAS,C,CPP)可执行文件名BUSSES.EXE输入文件名BUSSES.IN输出文件名 BUSSES.OUT帮他找到一种乘车方案使费用最小(10公里的费用比1公里小的情况是允许的)。

编一程序:从文件BUSSES.IN中读入对乘车费用的描述;算出最小的价格;把结果写入文件BUSSES.OUT中。

输入输入文件共两行,第一行为10个不超过100的整数,依次表示行驶1~10公里的费用,相邻两数间用空格隔开;第二行为某人想要行驶的公里数。

输出输出文件仅一行包含一个整数,表示该测试点的最小费用。

样例BUSSES.IN12 21 31 40 49 58 69 79 90 10115BUSSES.OUT147_______________________________________________________________________________ 筷子源程序名CHOP.??? (PAS,C,CPP)可执行文件名 CHOP.EXE输入文件名 CHOP.IN输出文件名 CHOP.OUTA先生有很多双筷子。

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

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

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

每人需要用一双筷子。

A先生只好清理了一下筷子,共N根,长度为T1,T2,T3,……,TN.现在他想用这些筷子组合成K+3双,使每双的筷子长度差的平方和最小。

(怎么不是和最小??这要去问A先生了,呵呵)输入输入文件共有两行,第一行为两个用空格隔开的整数,表示N,K(1≤N≤100, 0<K<50),第二行共有N个用空格隔开的整数,为Ti.每个整数为1~50之间的数。

输出输出文件仅一行。

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

样例CHOP.IN10 11 123 3 34 6 10 20CHOP.OUT5说明第一双 1 1第二双 2 3第三双 3 3第四双 4 6(1-1)^2+(2-3)^2+(3-3)^2+(4-6)^2=5_______________________________________________________________________________ 护卫队源程序名CONVOY.??? (PAS,C,CPP)可执行文件名CONVOY.EXE输入文件名CONVOY.IN输出文件名 CONVOY.OUT护卫车队在一条单行的街道前排成一队,前面河上是一座单行的桥。

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

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

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

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

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

每辆车的重量是已知的。

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

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

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

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

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

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

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

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

样例CONVOY.IN100 5 1040 2550 2050 2070 1012 509 7049 3038 2527 5019 70CONVOY.OUT75.0_______________________________________________________________________________ DOLLARS源程序名DOLLARS.??? (PAS,C,CPP)可执行文件名DOLLARS.EXE输入文件名DOLLARS.IN输出文件名 DOLLARS.OUT在以后的若干天里戴维将学习美元与德国马克的汇率。

相关文档
最新文档