贪心算法

Problem1删数问题

题目描述:

    给定一正整数n(n的位数小于240),现要删除数n中的s个数码,使其得到的新数最小,求这个最小数。

输入

    输入有两行,第一行为整数n,第二行即为s

输出

输出一行,即最小的那个数

Problem2旅行家的预算

题目描述

    一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离D1、汽车油箱的量C(以升为单位)、每升汽油能行驶的距离D2、出发点每升汽油价格P和沿途油站数N(N可以为零),油站i离出发点的距离i、每升汽油价格Pi(i=1,2,……N)。计算结果四舍五入至小数点后两位。如果无法到达目的地,则输出“No Solution”。

输入

    输入第一行有5个数:D1,c,D2,P,N(前四个为实数,N为整数,N<=1000)

    后面有N行,每行两个实数,分别表示对应的加油站离出发点的距离,与每升汽油的价格

输出

    输出仅一行,即最少花费

Problem3线段覆盖

题目描述

    给定数轴上的n条线段(n<100),每个线段有其端点ai、bi组成(-999<=ai<bi<=999),由于有些线段会相互覆盖,所以求出至少去掉多少条线段,才能使剩下的所有线段之间互相没有内部公共点(若只是端点重合,则不是内部公共点)。

输入

    输入第一行为整数N,接下来有N行,分别描述每条线段

输出

    输出第一行为最少删除的线段数s

    后面s行描述一个可行的删除方案,即删除那些线段

Problem4背包问题

题目描述

    有一个贼在偷窃一家商店时发现有N件物品:第i件物品值Vi元,重Wi磅,(1≤i≤n),此处Vi和Wi都是整数。他希望带走的东西越值钱越好,但他的背包中最多只能装下W磅的东西(W为整数),小偷可带走某个物品的一部分(只带走其中的几磅),小偷应该带走哪几件东西,每件东西的重量是多少?

输入

    输入第一行为N(N<=10000),后面N行描述每个物品,每行两个数,即为Vi与Wi

输出

输出第一行为大的最大价值,后面依次描述物品i应偷多少(如果没偷,则不输出,输出对应的i为升序)。

Problem5任务调度

题目描述

    一个单位时间任务是个作业,如要在计算机上运行一个程序,它恰覆盖一个单位的运行时间。给定一个单位时间任务的集合S,对S的一个调度即S的一个排列,其中规定了这些任务的执行顺序。该调度中的第一个任务开始于时间0,结束于时1;第二个任务开始于时间1, 结束于时间2;……。单处理器上具有期限和罚款的单位时间任务调度问题的输入如下:

     1.包含n个单位时间任务的集合S={1,2,……,n};

     2.n个取整的期限d1,……,dn,(1≤d,≤n),任务i要求在di前完成;

     3.n个非负的权(或罚款)w1,……,wn。如果任务i没在时间di之前结束,则导致罚款wi;

     要求找出S的一个调度,使之最小化总的罚款。

输入

    输入第一行为N(N<=1000),后面N行每行两个数,即为对应的di与wi

输出

    输出最小总罚款Problem6果子合并

Problem6果子合并

题目描述

    在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。

    每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。

    因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。

    例如有3种果子,数目依次为1,2,9。可以先将1、2堆合并,新堆数目为3,耗费体力为3。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为12,耗费体力为12。所以多多总共耗费体力=3+12=15。可以证明15为最小的体力耗费值。

输入

    输入第一行为N(N<=1000),第二行有N个整数,分别描述每个果子

输出

输出一个数即最小代价

Problem7射击竞赛

题目描述

    射击的目标是一个由R*C(2≤R≤C≤1000)个小方格组成的矩形网格。每一列恰有2个白色的小方格和R-2个黑色的小方格。行从顶至底编号为1-R,列从左至右编号为1-C。射击者可射击C次。在连续的C次射击中,若每列恰好有一个白色的方格被射中,且不存在无白色方格被射中的行,这样的射击才是正确的。如果存在正确的射击方法,则要求找到它。

输入

    输入第一行为R,C,后面R行每行C个数,如果为0则为白格,1则为黑格

输出

输出正确方案——每行两个数即射击坐标,否则输出-1

Problem8任务安排

题目描述

    一家工厂的流水线正在生产一种产品,这需要两种操作:操作A和操作B。每个操作只有一些机器能够完成。A型机器从输入库接受工件,对其施加操作A,得到的中间产品存放在缓冲库。B型机器从缓冲库接受中间产品,对其施加操作B,得到的最终产品存放在输出库。所有的机器平行并且独立地工作,每个库的容量没有限制。每台机器的工作效率可能不同,一台机器完成一次操作需要一定的时间。 给出每台机器完成一次操作的时间,计算完成A操作的时间总和的最小值,和完成B操作的时间总和的最小值。

输入

    输入第一行  三个用空格分开的整数:

    N,工件数量 (1<=N<=1000)

    M1,A型机器的数量 (1<=M1<=30)

    M2,B型机器的数量 (1<=M2<=30)

    第二行……,接下来M1个整数(表示A型机器完成一次操作的时间,1..20),接着是M2个整数(B型机器完成一次操作的时间,1..20)

输出

只有一行。输出两个整数:完成所有A操作的时间总和的最小值,和完成所有B操作的时间总和的最小值(A操作必须在B操作之前完成)。

Problem9最小差距

题目描述

    给定一些不同的一位数字,你可以从这些数字中选择若干个,并将它们按一定顺序排列,组成一个整数,把剩下的数字按一定顺序排列,组成另一个整数。组成的整数不能以0开头(除非这个整数只有1位)。

    例如,给定6个数字,0,1,2,4,6,7,你可以用它们组成一对数10和2467,当然,还可以组成其他的很多对数,比如210和764,204和176。这些对数中两个数差的绝对值最小的是204和176,为28。

    给定N个不同的0~9之间的数字,请你求出用这些数字组成的每对数中,差的绝对值最小的一对(或多对)数的绝对值是多少?

输入

    输入第一行包括一个数T(T≤1000),为测试数据的组数。

  每组数据包括两行,第一行为一个数N(2≤N≤10),表示数字的个数。下面一行为N个不同的一位数字。

输出

输出T行,每行一个数,表示第i个数据的答案。即最小的差的绝对值

posted @ 2011-03-09 09:57  青 蛙  阅读(1141)  评论(0编辑  收藏  举报