算法合集之《浅谈几类背包题》

算法合集之《浅谈几类背包题》
算法合集之《浅谈几类背包题》

浅谈几类背包题

浙江省温州中学徐持衡指导老师:舒春平

2008年12月

目录

摘要 (3)

关键字 (3)

正文 (4)

一、引言 (4)

二、背包的基本变换 (5)

①完全背包 (5)

②多次背包 (5)

③单调队列优化☆ (6)

三、其他几类背包问题 (8)

①树形依赖背包(获取学分)☆ (8)

②PKU3093☆ (11)

四、总结 (12)

附录 (13)

参考文献 (13)

文中原题 (13)

摘要

背包问题作为一个经典问题在动态规划中是很基础的一个部分,然而以0-1背包问题为原题,衍生转变出的各类题目,可以说是千变万化,当然解法也各有不同,如此就有了继续探究的价值。

本文就4道背包变化的题做一些探讨研究,提出本人的一些做法,希望能起到抛砖引玉的作用。

关键字

动态规划背包优化

正文

一、引言

背包问题是运筹学中的一个经典的优化难题,是一个NP-完全问题,但其有着广泛的实际应用背景,是从生活中一个常见的问题出发展开的:一个背包,和很多件物品,要在背包中放一些物品,以达到一定的目标。

在信息学中,把所有的数据都量化处理后,得到这样的一个问题:

0-1 背包问题:给定n 件物品和一个背包。物品i的价值是W i,其体积为V i,背包的容量为C。可以任意选择装入背包中的物品,求装入背包中物品的最大总价值。

在选择装入背包的物品时,对每件物品i ,要么装入背包,要么不装入背包。不能将物品i 多次装入背包,也不能只装入部分物品i (分割物品i)。因此,该问题称为0-1 背包问题。

用于求解0-1背包问题的方法主要有回溯算法、贪婪算法、遗传算法、禁忌搜索算法、模拟退火算法等。

在高中阶段,我们所谓的经典0-1背包问题,保证了所有量化后的数据均为正整数,即是一个特殊的整数规划问题,本文中如无特殊说明均以此为前提。其经典的O(n*C)动规解法是:

状态是在前i件物品中,选取若干件物品其体积总和不大于j,所能获得的最大价值为F i[j],当前的决策是第i件物品放或者不放,最终得到转移方程:

F i[j] = F i-1[j] (V i>j>=0)

F i[j] = max{ F i-1[j] , F i-1[j-V i]+W i } (C>=j>=V i)

其中由于F i只与F i-1有关,可以用滚动数组来节省程序的空间复杂度。以下就是经典算法的伪代码。

1.FOR i: = 1 TO n

2. FOR j: = C DOWNTO V i

3. Max ( F[ j ] , F[ j-V i ] + W i ) → F[ j ]

4. END FOR

5.END FOR

二、背包的基本变换

①完全背包

完全背包问题:给定n 种物品和一个背包。第i种物品的价值是W i,其体积为V i,背包的容量为C,同一种物品的数量无限多。可以任意选择装入背包中的物品,求装入背包中物品的最大总价值。

这个问题完全可以转化为0-1背包问题来解决,即把第i种物品分割成

(C div V i)件物品,再用0-1背包问题的经典动规实现。

但是,这个算法的时间复杂度太高,并不能作为一种实用的方法来实现。

很容易注意到,这个问题对于0-1背包来说,是另一个极端,每种物品都可以无限制地取,只要改变转移方程,就可以构造出新的算法:状态是在前i种物品中,选取若干件物品其体积总和不大于j,所能获得的最大价值为F i[j],当前的决策是第i件物品放(多件)或者不放,转移方程是

F i[j] = F i-1[j] (V i>j>=0)

F i[j] = max{ F i-1[j] , F i[j-V i]+W i } (C>=j>=V i) //注意第二个是F i而不是

F i-1,与0-1背包区别仅在于此,因为允许在放过的基础上再增加一件。

这样,这个问题就有了与0-1背包一样时间复杂度O(n*C)的解决方法,同样的可以用滚动数组来实现。

1.FOR i: = 1 TO n

2. FOR j: = V i TO C

3. Max ( F[ j ] , F[ j-V i ] + W i ) → F[ j ]

4. END FOR

5.END FOR

②多次背包

多次背包问题:给定n 种物品和一个背包。第i种物品的价值是W i,其体积为V i,数量是K i件,背包的容量为C。可以任意选择装入背包中的物品,求装入背包中物品的最大总价值。

和完全背包一样,可以直接套用0-1背包问题的经典动规实现,但是效率太低了,需要寻找更高效的算法。

首先对于第i种物品,不能确定放多少件才是最优的,因为并没有什么可以证明放一件或者全放一定会更优。换句话说,最优解所需要的件数,可能是0到K i中的任何数。

在日常生活中,如果需要能拿得出1到K i的任意整数数额的钱,往往

不会带K i个一元钱,因为那实在是太不方便了,取而代之的是带一些1元和其他一些面值各不相同的非1数额的钱。

这种思想完全可以运用到这道题上!

不需要把一种物品拆分成K i份,而是只要物品拆分到能凑出1到K i 之间任意数量的程度就可以了。

可以证明,按照二进制的拆分能使件数达到最小,把K i拆分成1,2,4…2t,K i-2t+1+1(2t+2>K i>=2t+1),就一定可以满足最优解要求了。下一步,还是用0-1背包的经典算法。

如此,我们得到了一个时间复杂度为O(C*∑([log

2K

i

]))的算法。

1.FOR i: = 1 TO n

2. 1 → m

3. WHILE K i > 0

4. IF m > K i THEN K i→ m

5. K i– m → K i

6. FOR j: = C DOWNTO V i * m

7. Max( F[ j ] , F[ j-V i*m ] + W i * m ) → F[ j ]

8. END FOR

9. m * 2 → m

10. WEND

11.END FOR

此算法还能加上一个优化,判断如果K i大于C/V i,则多出的部分是没有意义的,可以舍去。时间复杂度就可以优化到O(n*C*log2C)。由于在高中阶段碰到的题中C的值很有限,所以这个算法在实际应用上的效果已经可能满足一般的需求了。

但是在下一节中,有一个更高效的解决方法。

③单调队列优化☆

长度限制最大连续和问题:给出长度为n 的序列X i,求这个序列中长度不超过l max的最大连续和。

首先考虑最简单的做法,就是直接用O(n*l max)的二次循环求最大值:

1.FOR i: = 1 TO n

2. 0 → s

3. FOR j: = i DOWNTO Max( i-l max+1 ,1)

4. s + X j→ s

5. IF s > ans THEN s → ans

6. END FOR

7.END FOR

用S i记X1到X i的总和,就可以看到,如果确定一个端点后,要做的就是在S数组的一个连续区间取一个最值,区间最值问题完全可以用线段树来实现。

但是这个题目的另一个特性是区间的长度是固定的,而且每个区间都只需要取一次,所以我们可以用更简单的数据结构来实现——单调队列。

先来研究一下单调队列,以维护最大值为例,在满足序列中的编号递

i+1i i-1i-1i i+1

单调队列除队列首元素出队列外,还需要用一定的操作来维护队列的特殊性质。如果进入了一个新的元素(a,b),其中a必然大于A R,但是b可能会大于等于B R。既然b大于等于B R,而元素R又是要先于新元素出队列,那么元素R就已经失去价值,因为接下来新元素必然都会比元素R更优。所以现在就可以删除元素R了。

重复上面的步骤,直到前面没有元素或者满足B R>b为止,再让新元素进队列。显然,当前的队列首元素,必定是这个区间的最大值。

1.PROCEDURE INSERT a , b

2. WHILE R >= L AND b > B[ R ] DO R - 1 → R

3. R + 1 → R

4. a → A[ R ]

5. b → B[ R ]

6.END

如此完成的单调队列,虽然不能保证每一次的操作是O(1),但是因为每个元素只进队列一次,并出队列一次,所以总效率是O(n)。

当然,这道题其实就是单调队列的基本功能,而我们希望的是能把它

用来优化背包问题,所以现在重新考虑多次背包问题。

对于第i种物品来说,已知体积v,价值w,数量k,那么可以按照当

现在看到分组以后,编号j可以从j-k到j-1中的任意一个编号转移而来(因为相邻的体积正好相差v),这看上去已经和区间最大值有点相似了。

但是注意到由于体积不一样,显然体积大的价值也会大于等于体积小的,直接比较是没有意义的,所以还需要把价值修正到同一体积的基础上。比如都退化到d,也就是说用F[j*v+d]- j*w来代替原来的价值进入队列。

对于第i件物品,转移伪代码:

1.FOR d: = 0 TO v-1 //枚举余数,分开处理

2.清空队列

3. FOR j: = 0 TO (C-d) div v //j枚举标号,对应体积为j*v+d

4. INSERT j , F[ j*v+d ] – j * w //插入队列

5. IF A[ L ] < j - k THEN L + 1 → L //如果队列的首元素已经失效

6. B[ L ] + j * w → F[ j*v+d ] //取队列头更新

7. END FOR

8.END FOR

已知单调队列的效率是O(n),那么加上单调队列优化以后的多次背包,效率就是O(n*C)了。

三、其他几类背包问题

①树形依赖背包(选课)☆

树形依赖背包问题:给定n 件物品和一个背包。第i件物品的价值是W i,其体积为V i,但是依赖于第X i件物品(必须选取X i后才能取i,如果无依赖则X i=0),依赖关系形成森林,背包的容量为C。可以任意选择装入背包中的物品,求装入背包中物品的最大总价值。

这道题需要在treedp的基础上用背包实现。

1泛化物品——定义:

考虑这样一种物品,它并没有固定的费用(体积)和价值,而是它的价值随着你分配给它的费用(体积)变化而变化。

泛化物品可以用一个一维数组来表示体积与价值的关系G j表示当体积为j的时候,相对应的价值为G j(C>=j>=0)。

显然,之前的背包动规数组F i,就是一件泛化物品,因为F i[j]表示的正是体积为j的时候的最大价值。同样的,多件物品也是可以合并成一件泛化物品。

泛化物品的和:

把两个泛化物品合并成一个泛化物品的运算,就是枚举体积分配给两个泛化物品,满足:

G[j] = max{ G1[j-k] + G2[k] } (C>=j>=k>=0)

把两个泛化物品合并的时间复杂度是O(C^2)。

对于具有树形依赖关系的背包问题,我们可以把每棵子树看作是一个泛化物品,那么一棵子树的泛化物品就是子树根节点的这件物品的泛化物品与由根所连的所有子树的泛化物品的和。

整个动规过程就是从叶子进行到根,对于每一棵子树的操作就是:

1.PROCEDURE DEAL i , v , w //第i个节点体积为v 价值为w

2. FOR j: = v TO C //初始化这件泛化物品

3. w → F i[ j ]

4. END FOR

5. FOR s: = 1 TO n

6. IF s 是 i 的儿子 THEN

7. F i与 F s的和→ F i

8. END IF

9. END FOR

10.END

一次只能把两个泛化物品合并,那么要把n个泛化物品合并成一个就需要n-1次合并,所以这个算法效率是O(n*C2+n2) ,当然,其中的O(n2)可以用邻接表的记边方法变成O(n),最终的效率就是O(n*C2)。

1“泛化物品”一词最初在DDengi的《背包九讲》中出现,下文中的“泛化物品的和”也引自《背包九讲》

回顾经典0-1背包问题,在那个经典算法中,求泛化物品与一件物品的和,只需要O(C)的时间复杂度,推论出:

泛化物品与一件物品的和:

把一个泛化物品与一件物品合并成一个泛化物品,可以用类似于0-1背包经典动规的方法求出。

G[j] = G1[j] (v>j>=0)

G[j] = max{ G1[j] , G1[j-v]+w } (C>=j>=v)

这样的合并,时间复杂度仅为O(C),同样也是合并了一件物品,效率比求两件泛化物品的和快很多。那么有没有办法用这种O(C)的合并方式来代替计算两个泛化物品的和来处理这道题呢?

泛化物品的并:

因为两个泛化物品之间存在交集,所以不能同时两者都取,那么我们就需要求泛化物品的并,对同一体积,我们需要选取两者中价值较大的一者,效率O(C)。

G[j] = max{ G1[j] , G2[j] } (C>=j>=0)

重新考虑对以i为根的子树的处理,假设当前需要处理i的一个儿子s。

如果我们在当前的F i中强制放入物品s后作为以s为根的子树的初始状态的话,那么处理完以s为根的子树以后,F s就是与F i有交集的泛化物品(实际上是F s包含F i),同时,F s必须满足放了物品s,即F s[j] (V s>j>=0)已经无意义了,而F s[j](C>=j>=V s)必然包含物品s。为了方便,经过处理以后,在程序中规定只有F s[j](C-V s>=j>=0)是合法的。

接下来只需要把F s与F i的并赋给F i,就完成了对一个儿子的处理。如此,我们需要的总时间复杂度仅为O(n*C)。

1.PROCEDURE DEAL i , C

2.FOR s: = 1 TO n

3. IF s 是 i 的儿子 THEN

4. F i→ F s

5. DEAL s , C – V s //背包容量减小V s

6. FOR K: =V s TO C //求两者的并

7. Max ( F i[ k ] , F s[ k-V s ] + W s ) → F i[ k ]

8. END FOR

9. END IF

10. END FOR

11.END

2用这个算法,可以把《选课》这一类题优化到O(n*C),亦可以作为noip06《金明的预算方案》的O(n*C) treedp解法。

②PKU3093☆

PKU3093:给定n 件物品和一个背包,第i件物品的体积为V i,背包的容量为C。

要求把一些物品放入背包使得剩下的物品都放不下,求方案数。

暂时先不考虑“使剩下的物品都放不下”的条件,那就是求0-1背包的所有可行方案。

用F i[j]表示前i件物品中选若干件总体积为j的方案数,初始为F0[0]=1,转移方程是:

F i[j] = F i-1[j] (Vi>j)

F i[j] = F i-1[j] + F i-1[j-Vi](j>=Vi)

显然这个算法的效率是O(n*C)的,它计算了所有装放背包的方案数。

现在考虑“使剩下的物品都放不进去”的条件,如果剩下的物品中体积最小为v,那么方案数就是sum{ F n[j] }(C>=j>C-v)。前提是我们事先确定了剩下中体积最小的是哪个。

对体积排序后,下一步就是枚举i作为剩余物品中体积最小的一件。对于所有si的物品做0-1背包可行方案的统计,将sum{ F n[j] }(C>=j>C-V i)累加到ans。

由于每次都需要对n-i件物品做统计,一共统计n次,效率是O(n2*C)。

1.0 → sum //sum记1到i-1的物品体积总和

2.FOR i: = 1 TO N

3. F数组清零

4. 1 → F[ sum ] //初始化

5. FOR s: = i + 1 TO N //统计可行方案数

6. FOR j: = C DOWNTO V s + sum

7. F[ j ] + F[ j-V s ] → F[ j ]

8. END FOR

9. END FOR

10. FOR k: = C DOWNTO C - V i + 1 //累加总方案数

11. IF k >= sum THEN ans + F[ k ] → ans

2在附录中有两道原题以及我的程序。在论文完成之后,经TKY提醒发现,同样效率的算法已经在07年的《浅谈数据的合理组织》(何森)中被提及,所以这个算法只能算是另一种更简单的O(n*C)实现方法。

12. END FOR

13. sum + V i→ sum

14.END FOR

可以发现,同一个物品多次被考虑放入背包,这样会造成时间的浪费。

观察得到,第i件物品共考虑了i-1次。每一次循环都会少一件物品。如果把整个过程倒置,每件物品是否可以只考虑一次呢?

由于初始状态不一样,我们还需要把初始状态统一。可以让每次F[0]=1,总容量为C-sum。

但是只统一初始化状态还不够,因为每次的背包容量还是不同的,做背包统计的时候,背包容量不可以是一个变值,也必须要统一,所以每次考虑一件物品都要用最大容量C来更新背包。

一次操作之后要将sum{ F[j] }(C-sum>=j>C-sum-V i , j>=0)累加到ans。

现在,每件物品都只考虑一次,背包体积统一是C,那么效率就变成了O(n*C)。

1.0 → sum

2. 1 → F[ 0 ]

3.FOR i: = 1 TO n

4. sum + V i→ sum

5.END FOR

6.FOR i: = n DOWNTO 1

7. sum - V i→ sum

8. FOR j: = C - sum DOWNTO Max( C – sum – V i + 1 , 0 )//累加总方案数

9. ans + F[ k ] → ans

10. END FOR

11. FOR j: = C DOWNTO V i //考虑第i件物品放入背包

12. F[ j ] + F[ j – V i ] → F[ j ]

13. END FOR

14.END FOR

四、总结

回顾全文的四道背包题:对于完全背包问题,用转化方程就解决了;对于多次背包,使用了单调队列优化来实现O(n*C)的效率;在树形依赖背包问题中,

探索了新的概念,最终完成算法的转化;而在PKU3093一题中,通过合并相似操作来达到优化的效果。

虽然用到的方法各不相同,每个方法都不仅仅限于背包问题,完全可以灵活运用到其他问题中。

凡是文中提到的问题最后都用时间复杂度O(n*C)的算法解决了,这并不是说所有背包题都可以优化到这个程度,但是,可以肯定的是不会有比这个更快的效率了。

就目前来说,背包类的题目还有很多没有得到很好的解决,等待着大家去继续探索研究。

附录

参考文献:

《背包九讲》——DDengi,ZJU

文中原题

来源:ctsc97

1.选课

大学里实行学分。每门课程都有一定的学分,学生只要选修了这门课并考核通过就能获得相应的学分。学生最后的学分是他选修的各门课的学分的总和。

每个学生都要选择规定数量的课程。其中有些课程可以直接选修,有些课程需要一定的基础知识,必须在选了其它的一些课程的基础上才能选修。例如,《数据结构》必须在选修了《高级语言程序设计》之后才能选修。我们称《高级语言程序设计》是《数据结构》的先修课。每门课的直接先修课最多只有一门。两门课也可能存在相同的先修课。为便于表述每门课都有一个课号,课号依次为1,2,3,……。下面举例说明

上例中1是23,

那么1和2都一定已被选修过。

学生不可能学完大学所开设的所有课程,因此必须在入学时选定自己要学的课程。每个学生可选课程的总数是给定的。现在请你找出一种选课方案,使得你能得到学分最多,并且必须满足先修课优先的原则。假定课程之间不存在时间上的冲突。

输入

输入文件的第一行包括两个正整数M、N(中间用一个空格隔开)其中M表示待选课程总数(1≤M≤1000),N表示学生可以选的课程总数(1≤N≤M)。

以下M行每行代表一门课,课号依次为1,2……M。每行有两个数(用一个空格隔开),第一个数为这门课的先修课的课号(若不存在先修课则该项为0),第二个数为这门课的学分。学分是不超过10的正整数。

输出

输出文件第一行只有一个数,即实际所选课程的学分总数。以下N行每行有一个数,表示学生所选课程的课号。

输入输出示例

INPUT.TXT

7 4

2 2

0 1

0 4

2 1

7 1

7 6

2 2

OUTPUT.TXT

13

2

6

7

3

《选课》的源代码

1.var

2.n,C,i:longint;

3.x,w:array[1..400]of longint;

4.f:array[0..400,0..400]of longint;

5.

6.procedure dfs(k,C:longint);

7.var

8.i,j:longint;

9.begin

10. if C<=0 then exit;

11. for i:=1 to n do if x[i]=k then begin

12. for j:=0 to C-1 do f[i,j]:=f[k,j]+w[i];//强制放入物品i

13. dfs(i,C-1);

14. for j:=1 to C do

15. if f[i,j-1]>f[k,j] then

16. f[k,j]:=f[i,j-1]; //求两者的并

17. end;

18.end;

19.

20.begin

21. readln(n,C);

22. for i:=1 to n do begin

23. readln(x[i],w[i]); //读入父节点标号x[i] 和学分w[i]

24. end;

25. dfs(0,C); //以0作为所有没有父节点的点的父亲

26. writeln(f[0,C]);

27.end.

来源:NOIP2006第二题

2.金明的预算方案

(budget.pas/c/cpp)

【问题描述】

金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”。今天一早,金明就开始做预算了,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子:

如果要买归类为附件的物品,必须先买该附件所属的主件。每个主件可以有0个、1个或2个附件。附件不再有从属于自己的附件。金明想买的东西很多,肯定会超过妈妈限定的N元。于是,他把每件物品规定了一个重要度,分为5等:用整数1~5表示,第5等最重要。他还从因特网上查到了每件物品的价格(都是10元的整数倍)。他希望在不超过N元(可以等于N元)的前提下,使每件物品的价格与重要度的乘积的总和最大。

设第j件物品的价格为v[j],重要度为w[j],共选中了k件物品,编号依次为j1,j2,……,j k,则所求的总和为:

v[j1]*w[j1]+v[j2]*w[j2]+ …+v[j k]*w[j k]。(其中*为乘号)

请你帮助金明设计一个满足要求的购物单。

输入文件budget.in 的第1行,为两个正整数,用一个空格隔开:

N m

(其中N(<32000)表示总钱数,m(<60)为希望购买物品的个数。)

从第2行到第m+1行,第j行给出了编号为j-1的物品的基本数据,每行有3个非负整数

v p q

(其中v表示该物品的价格(v<10000),p表示该物品的重要度(1~5),q表示该物品是主件还是附件。如果q=0,表示该物品为主件,如果q>0,表示该物品为附件,q是所属主件的编号)

【输出文件】

输出文件budget.out只有一个正整数,为不超过总钱数的物品的价格与重要度乘积的总和的最大值(<200000)。

【输入样例】

1000 5

800 2 0

400 5 1

300 5 1

400 3 0

500 2 0

2200

1.var

2.n,C,i:longint;

3.x,w,v:array[1..60]of longint;

4.f:array[0..60,0..3200]of longint;

5.procedure dfs(k,C:longint);

6.var i,j:longint;

7.begin

8. if C<=0 then exit;

9. for i:=1 to n do if x[i]=k then begin

10. for j:=0 to C-v[i] do f[i,j]:=f[k,j]+w[i]; //强制放入物品j

11. dfs(i,C-v[i]);

12. for j:=v[i] to C do

13. if f[i,j-v[i]]>f[k,j] thenf[k,j]:=f[i,j-v[i]];//求两者的并

14. end;

15.end;

16.begin

17. assign(input,'budget.in');reset(input);

18. assign(output,'budget.out');rewrite(output);

19. readln(C,n);

20. c:=c div 10;

21. for i:=1 to n do begin

22. readln(v[i],w[i],x[i]); //读入费v[i] 重要度w[i] 父节点标号x[i]

23. w[i]:=w[i]*v[i];

24. v[i]:=v[i] div 10;

25. end;

26. dfs(0,C); //以0作为所有没有父节点的点的父亲

27. writeln(f[0,C]);

28. close(output);

29.end.

来源:Pku 3093

Margaritas on the River Walk

Time Limit: 1000MS Memory Limit: 65536K

Total Submissions: 694 Accepted: 271

Description

One of the more popular activities in San Antonio is to enjoy margaritas in the park along the river know as the River Walk. Margaritas may be purchased at many establishments along the River Walk from fancy hotels to Joe’s Taco and Margarita stand. (The problem is not to find out how Joe got a liquor license. That involves Texas politics and thus is much too difficult for an ACM contest problem.) The prices of the margaritas vary depending on the amount and quality of the ingredients and the ambience of the establishment. You have allocated a certain amount of money to sampling different margaritas.

Given the price of a single margarita (including applicable taxes and gratuities) at each of the various establishments and the amount allocated to sampling the margaritas, find out how many different maximal combinations, choosing at most one margarita from each establishment, you can purchase. A valid combination must have a total price no more than the allocated amount and the unused amount (allocated amount – total price) must be less than the price of any establishment that was not selected. (Otherwise you could add that establishment to the combination.)

For example, suppose you have $25 to spend and the prices (whole dollar amounts) are:

Then possible combinations (with their prices) are:

ABC(25), ABD(24), ABJ(22), ACD(23), ACJ(21), ADJ( 20), AH(24), BCD(24), BCJ(22), BDJ(21), BH(25), CDJ(20), CH(24), DH(23) and HJ(21).

Thus the total number of combinations is 15.

Input

The input begins with a line containing an integer value specifying the number of datasets that follow, N(1 ≤ N≤ 1000). Each dataset starts with a line containing two

integer values V and D representing the number of vendors (1 ≤ V≤ 30) and the dollar amount to spend (1 ≤ D≤ 1000) respectively. The two values will be separated by one or more spaces. The remainder of each dataset consists of one or more lines, each containing one or more integer values representing the cost of a margarita for each vendor. There will be a total of V cost values specified. The cost of a margarita is always at least one (1). Input values will be chosen so the result will fit in a 32 bit unsigned integer.

Output

For each problem instance, the output will be a single line containing the dataset number, followed by a single space and then the number of combinations for that problem instance.

Sample Input

2

6 25

8 9 8 7 16 5

30 250

1 2 3 4 5 6 7 8 9 10 11

12 13 14 15 16 17 18 19 20

21 22 23 24 25 26 27 28 29 30

Sample Output

1 15

2 16509438

Hint

Note: Some solution methods for this problem may be exponential in the number of vendors. For these methods, the time limit may be exceeded on problem instances with a large number of vendors such as the second example below.

Source

Greater New York 2006

最新设计方案范文合集6篇

1 建设物流实训室的必要性 在社会需求的推动下,20xx年起,全国部分学校开始试办“物流管理”等相关专业,为企业培养和输送物流专业人才。这在一定程度上对物流知识和思想的传播起到了很好的作用,也的确培养了一些物流人才。他们在相关的物流岗位上发挥了作用,有效地促进了企业物流运作的变革和进步。 但是,其中反映出的问题也不少,主要体现在以下几个方面: 1.1 偏重理论培训,缺少实践环节 目前在各种认证体系中,基本上以知识性学习为主,只有少量的实际操作环节。 现代物流业很注重实际操作经验,仅有理论知识难以解决企业的实际业务问题,物流培训也必须以此为重要原则,加强实训功能,注重对实际业务的理解和对实际操作技能的掌握,才能培养出符合企业需求的人才。 1.2 教学手段单一,感性认识与理性认识不能有机结合 目前无论是高校的物流学历教育还是职业培训,普遍存在一个问题,就是教学主要以教师分散授课为主,辅以少量甚至没有参观。学员们无法全面系统地了解物流运作的整个过程,除少量悟性较高的学员外,大多数学员的物流知识结构比较凌乱。 1.3 传统实训方式已不能满足学生和企业的需要 学生实训要求在类似企业实际的环境下,并且实训的设备、软件必须是企业实际应用的,或在企业实际应用基础上改造过来。 随着国内教育教学改革的深入,实训方式创新层出不穷,旧有的实训方式尤其是模拟仿真远远不能满足现有教学的需要。 2 物流实训室设计理念 通过实训室对各节点模拟,从而展现货物的入库、仓储、流通加工、配送、出库等第三方物流企业的供应链流程。在此模拟的供应链上,配备一系列模块化的现代物流设施,如:全自动立体仓库、电子标签辅助拣货系统、电子看板,RF手持设备等,它们各自独立,又互为联系,充分体现了传统的物流运行过程通过信息化实现其战略决策系统化,管理现代化和作业自动化这一现代物流的时代特征,从而在学校实训室内营造了一个类似真实的集物资流和信息流于一体的实训教学环境。 3 实训室方案规划设计 物流实训室平面布局 主要组成部分: 全自动立体仓库及自动分拣:立体货架、全自动堆垛机及输送装置等; 普通仓储货架:重型及轻型货架; 电子标签拣货系统:重力式货架、电子标签分拣系统及拣货台等; 打包封装:多种款式的打包设备; 条码及射频系统:RF手持终端、条码打印机及多种条码阅读设备; 管理岗位:物流软件、PC及桌椅。 4 实训系统功能 之所以要在学校实训室条件下,构建一个类似真实的以第三方物流服务单元为核心的供应链仿真系统,其真实目的是想以此为学校进行现代供应链物流运作管理等相关课程的课堂理论教学提供一个有效的辅助教学手段,并为学生掌握各种现代化,自动化的物流设施设备的操作技能,提供一个实实在在的实训平台。 所以从这个意义上说,我们这套实训系统应具有以下教学实训功能: 4.1 了解和学习物流管理的内容和技术 1、仓储管理系统的操作训练

算法分析与设计试卷

《算法分析与设计》试卷(A) (时间90分钟满分100分) 一、填空题(30分,每题2分)。 1.最长公共子序列算法利用的算法是( B )。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法2.在对问题的解空间树进行搜索的方法中,一个活结点最多有一次机会成为活结点的是( B ). A.回溯法 B.分支限界法 C.回溯法和分支限界法 D.回溯法求解子集树问题 3.实现最大子段和利用的算法是( B )。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法4..广度优先是( A )的一搜索方式。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法5.衡量一个算法好坏的标准是( C )。 A 运行速度快 B 占用空间少 C 时间复杂度低 D 代码短 6.Strassen矩阵乘法是利用( A)实现的算法。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 7. 使用分治法求解不需要满足的条件是( A )。 A 子问题必须是一样的 B 子问题不能够重复 C 子问题的解可以合并 D 原问题和子问题使用相同的方法解 8.用动态规划算法解决最大字段和问题,其时间复杂性为( B ). A.logn B.n C.n2 D.nlogn 9.解决活动安排问题,最好用( B )算法 A.分治 B.贪心 C.动态规划 D.穷举 10.下面哪种函数是回溯法中为避免无效搜索采取的策略( B ) A.递归函数 B.剪枝函数C。随机数函数 D.搜索函数11. 从活结点表中选择下一个扩展结点的不同方式将导致不同的分支限界法,以下除( C )之外都是最常见的方式. A.队列式分支限界法 B.优先队列式分支限界法 C.栈式分支限界法 D.FIFO分支限界法 12. .回溯算法和分支限界法的问题的解空间树不会是( D ). A.有序树 B.子集树 C.排列树 D.无序树 13.优先队列式分支限界法选取扩展结点的原则是( C )。 A、先进先出 B、后进先出 C、结点的优先级 D、随机14.下面是贪心算法的基本要素的是( C )。 A、重叠子问题 B、构造最优解 C、贪心选择性质 D、定义最优解15.回溯法在解空间树T上的搜索方式是( A ). A.深度优先 B.广度优先 C.最小耗费优先 D.活结点优先 二、填空题(20分,每空1分)。 1.算法由若干条指令组成的又穷序列,且满足输入、输出、 确定性和有限性四个特性。 2.分支限界法的两种搜索方式有队列式(FIFO)分支限界法、优先队列式分支限界法,用一个队列来存储结点的表叫活节点表。

深入探究多项式乘法的快速算法

深入探究多项式乘法的快速算法 焦作市第一中学 闵梓轩 一、 高精度、多项式与生成函数 1.1 高精度 在OI 中我们有时会碰到一些问题的必要数值超出64位整形的范围,这个时候我们就需要用到高精度方式存储。而高精度数的思想是进制思想的一个具体体现,出于正常人类的习惯,我们所使用的高精度数都采用10进制,即每一位都表示十进制上的一个数,从0~9,更进一步,为了优化高精度数运算所花费的时间与空间,我们采用了万进制,即每一位存0~9999的数,这样同时优化了程序效率,同时在输出上也没有什么太大的问题(每一位不足1000补0即可)。 当然,我们也可以用三进制、五进制、450进制,8964进制的高精度数,虽然因为在输出时会变得非常麻烦而没有人去用,但是它们的可行性正对应了进制的一种思想,比如一个十进制数12450,它的算数含义是0123410*010*510*410*210*1++++二进制数10010,它的算数含义是1 42*12*1+(把为0的位忽略),这样形如 ),0(*0N a x a x a i i n i i i ∈<≤∑=的每一位上的数字在数值表示上都乘上了某个数的一个幂的数正是进制思想的基础。在编程实现上这样的一个数我们通常用整形数组来表示,a[i]表示i 次项的系数,如果数组长度为n ,那么学过高精度的人都知道两个数相加的时间复杂度是θ(n),两个数相乘的时间复杂度是O(n^2),在信息学竞赛中,这样的时间复杂度足以满足大部分题目的需求,因为一般来说我们的数值都不会达到10^100000次方这么大。 1.2多项式 熟悉数学的我们能够发现上面这样的一个式子,如果忽略了括号中的内容的限制,那么 我们可以发现这样的式子其实就是我们所学的n 次多项式∑∞==0*)(i i i x a x A , 比如十进制数12450就是05421234++++x x x x 当x=10的时候的数值嘛。所以,当一个值b 代入多项式A(x)时,这个式子也就变成了一个值A(b)。但是要注意的是多项式的系数是没有限制的,所以多项式可以用浮点数组表示,而且我们可以惊奇地发现多项式的加法和乘法在代码上除了不需要进位之外和高精度是一样的。所以说,我们所见的b 进制数值,就是一个当x=b 的多项式的取值而已。但是在多项式中,x 的意义仅仅是一个符号而已,ai*x^i 你可以理解为ai 在数组的第i 个位置。 我们需要注意的是,n 次多项式的数组表示需要用到n+1个数,为什么?因为有n 个含x 的项和一个常数项,所以我们一般把多项式A(x)的最高次项的次数+1称作为这个多项式的次数界(次数界的真正意义是系数不为零的最高次项的次数+1,下文中提到的“次数界“为

算法合集之《左偏树的特点及其应用》

左偏树的特点及其应用 广东省中山市第一中学黄源河 【摘要】 本文较详细地介绍了左偏树的特点以及它的各种操作。 第一部分提出可并堆的概念,指出二叉堆的不足,并引出左偏树。第二部分主要介绍了左偏树的定义和性质。第三部分详细地介绍了左偏树的各种操作,并给出时间复杂度分析。第四部分通过一道例题,说明左偏树在当今信息学竞赛中的应用。第五部分对各种可并堆作了一番比较。最后总结出左偏树的特点以及应用前景。 【关键字】左偏树可并堆优先队列 【目录】 一、引言 (2) 二、左偏树的定义和性质 (2) 2.1 优先队列,可并堆 (2) 2.1.1 优先队列的定义 (2) 2.1.2 可并堆的定义 (2) 2.2 左偏树的定义 (3) 2.3 左偏树的性质 (4) 三、左偏树的操作 (6) 3.1 左偏树的合并 (6) 3.2 插入新节点 (8) 3.3 删除最小节点 (9) 3.4 左偏树的构建 (9) 3.5 删除任意已知节点 (10) 3.6 小结 (13) 四、左偏树的应用 (15) 4.1 例——数字序列(Baltic 2004) (15) 五、左偏树与各种可并堆的比较 (18) 5.1 左偏树的变种——斜堆 (18) 5.2 左偏树与二叉堆的比较 (19) 5.3 左偏树与其他可并堆的比较 (19) 六、总结 (22) 在线代理|网页代理|代理网页|https://www.360docs.net/doc/9610702882.html,

【正文】 一、引言 优先队列在信息学竞赛中十分常见,在统计问题、最值问题、模拟问题和贪心问题等等类型的题目中,优先队列都有着广泛的应用。二叉堆是一种常用的优先队列,它编程简单,效率高,但如果问题需要对两个优先队列进行合并,二叉堆的效率就无法令人满意了。本文介绍的左偏树,可以很好地解决这类问题。 二、左偏树的定义和性质 在介绍左偏树之前,我们先来明确一下优先队列和可并堆的概念。 2.1优先队列,可并堆 2.1.1优先队列的定义 优先队列(Priority Queue)是一种抽象数据类型(ADT),它是一种容器,里面有一些元素,这些元素也称为队列中的节点(node)。优先队列的节点至少要包含一种性质:有序性,也就是说任意两个节点可以比较大小。为了具体起见我们假设这些节点中都包含一个键值(key),节点的大小通过比较它们的键值而定。优先队列有三个基本的操作:插入节点(Insert),取得最小节点(Minimum) 和删除最小节点(Delete-Min)。 2.1.2可并堆的定义 可并堆(Mergeable Heap)也是一种抽象数据类型,它除了支持优先队列的三个基本操作(Insert, Minimum, Delete-Min),还支持一个额外的操作——合并操作: H ← Merge(H1,H2) Merge( ) 构造并返回一个包含H1和H2所有元素的新堆H。 前面已经说过,如果我们不需要合并操作,则二叉堆是理想的选择。可惜合并二叉堆的时间复杂度为O(n),用它来实现可并堆,则合并操作必然成为算法的瓶颈。左偏树(Leftist Tree)、二项堆(Binomial Heap) 和Fibonacci堆(Fibonacci Heap) 都是十分优秀的可并堆。本文讨论的是左偏树,在后面我们将看到各种可并堆的比较。 在线代理|网页代理|代理网页|https://www.360docs.net/doc/9610702882.html,

设计方案范文合集八篇

设计方案范文合集八篇 设计方案范文合集八篇 为了确保事情或工作有序有力开展,常常需要预先准备方案,方案属于计划类文书的一种。方案应该怎么制定呢?以下是收集整理的设计方案8篇,仅供参考,希望能够帮助到大家。 设计方案篇1 一、活动目的 1、培养学生合作探究的精神与分析问题、解决问题的能力。 2、培养和增强学生的地理学习兴趣,关注身边的地理知识。 3、懂得多渠道收集课外资料。 二、活动时间及地点 三、活动方式 根据课室座位安排情况,以小组为单位,每两排组成一组,共分为四大组。以“野外考察员的困难”为主要内容,展开几个阶段的小组间的地理知识竞赛。 四、参与人员 全体同学 五、活动流程 活动刚开始,教师以一名“地理野外考察员”的身份登场,讲述他一天所遇到的困难。困难一:迷失了方向 1、活动准备

在活动前的地理课,向学生提出“当你迷失野外,你该如何来辨别方向”这一问题,让学生课后根据自己的生活经验或向有经验的长辈请教等各类方式收集有关方法,并以作业形式上交。 2、活动过程 学生以小组为单位,全组成员上交一份解决方法,教师当场逐一宣读,答对1个得1分,答错不得分。 3、活动小结 教师讲解野外辨别方向常用的几种方法。 附: 1)平时参考地图和指南针,同时积极观察周围的地形以及身边的植物来判断正确位置。 2)利用太阳 ①冬季日出位置是东偏南,日落位置是西偏南;夏季日出位置是东偏北,日落位置是西偏北;春分、秋分前后,日出正东,日落正西。 ②只要有太阳,就可以使用手表来辨别方向。按24小时制读出当时的时刻,将小时数除以二,将得到一个小时数。把手表水平放在手上或者地上,让手表的这个时刻对准太阳所在的方位,这时手表表面12点所指的方向是北方,6点所指的方向是南方。 设计方案篇2 1、幼儿园的功能组成 包括幼儿生活用房、服务用房、和供应用房三部分。 2、幼儿园的功能分析

算法设计与分析试卷A及答案

考试课程: 班级: 姓名: 学号: ------------------------------------------------- 密 ---------------------------------- 封 ----------------------------- 线 ---------------------------------------------------------

考试课程: 班级: 姓名: 学号: ------------------------------------------------- 密 ---------------------------------- 封 ----------------------------- 线 ---------------------------------------------------------

参考答案 一、填空 1、空间复杂度 时间复杂度 2、回溯法 3、递归算法 4、渐进确界或紧致界 5、原问题的较小模式 递归技术 6、问题的计算复杂性分析有一个共同的客观尺度 7、②③④① 8、问题的最优解包含其子问题的最优解 9、局部最优 10、正确的 三、简答题 1、高级语言更接近算法语言,易学、易掌握,一般工程技术人员只需要几周时间的培训就可以胜任程序员的工作; 高级语言为程序员提供了结构化程序设计的环境和工具,使得设计出来的程序可读性好,可维护性强,可靠性高; 高级语言不依赖于机器语言,与具体的计算机硬件关系不大,因而所写出来的程序可植性好、重用率高; 把繁杂琐碎的事务交给编译程序,所以自动化程度高,开发周期短,程序员可以集中时间和精力从事更重要的创造性劳动,提高程序质量。 2、 ①不能保证最后求得的解是最佳的;即多半是近似解。(少数问题除外) ②策略容易发现(关键:提取清楚问题中的维度), 而且运用简单,被广泛运用。 ③策略多样,结果也多样。 ④算法实现过程中,通常用到辅助算法:排序 3、解:① 因为:;01 -10n n )1-10n n (lim 22 2=+-+→∞n n 由渐近表达式的定义易知: 1-10n n 2 2+是n ;的渐近表达式。 ② 因为:;0n 1/ 5/n 1414)n 1/ 5/n 14(lim 22=++-++∞→n 由渐近表达式的定义易知: 14是14+5/n+1/ n 2的渐近表达式。 4、 找出最优解的性质,并刻划其结构特征。 递归地定义最优值。 以自底向上的方式计算出最优值。 根据计算最优值时得到的信息,构造最优解。 四、算法设计题 1、按照单位效益从大到小依次排列这7个物品为:FBGDECA 。将它们的序号分别记为1~7。则可生产如下的状态空间搜索树。其中各个节点处的限界函数值通过如下方式求得:【排序1分】 5x =6x =7x =

计划方案合集10篇

计划方案合集10篇 计划方案合集10篇 为了确保我们的努力取得实效,通常会被要求事先制定方案,方案是在案前得出的方法计划。那么什么样的方案才是好的呢?下面是小编帮大家整理的计划方案10篇,仅供参考,大家一起来看看吧。计划方案篇1 各林场(所):为进一步深入贯彻《甘肃省自然保护区条例》及《XX市人民政府关于进一步加强封山禁牧工作的通知》和《XX林业总场封山禁牧管理暂行办法》精神,巩固XX林区近年来的封山禁牧成果,加快生态环境建设步伐,现就我场XX年封山禁牧工作安排如下:一、明确指导思想我场的封山禁牧工作,坚持统筹规划,以封为主,禁牧与圈养、恢复生态和保护林农利益相结合的指导思想,按照《森林法》、《森林法实施条例》及市局、总场关于封山禁牧工作的总体部署和要求,坚持把加强封山禁牧工作作为恢复植被、改善生态、提高林木尽快成林的重要措施,作为改善人居环境,促进人与自然和谐相处,构建和谐林区的重要保障。各林场(所)要从促进林区经济社会可持续发展的大局出发,切实增强责任感和紧迫感,采取切实有效的措施,加大工作力度,真正把封山禁牧工作抓紧抓好,确保取得实效。二、细化工作任务一要提高认识,统筹安排,强化责任,分解任务。各林场(所)主要领导要切实提高认识,将封禁工作放在同林业生产同等重要的位置上,同安排同部署,并根据市局、总场封禁工作会议精神,延伸签订封禁工作目标管理责任书,确保封禁工作责任分解到站,细化到人。二要广泛宣传动员,营造良好舆论氛围。各林场(所)要采取召开干部会、群众大会、养殖户专题会、管护人员工作会、发放宣传资料、刷写宣传标语、悬挂横幅、制做固定宣传碑等多种形式,广泛宣传《森林法》、《森林法实施条例》、《XX 市人民政府关于进一步加强封山禁牧工作的通知》《XX、林业总场封山禁牧管理暂行办法》等有关政策法规文件,教育林区群众充分认识封山禁牧的重大意义,明确封山禁牧的范围、措施和责任,引导群众正确处理长远利益与当前利益、整体利益与局部利益、封山禁牧与畜牧养殖的关系,真正把封山禁牧工作变为广大群众的自觉行动,为封山禁牧创造良好的舆论氛围。三要详细调查摸底,掌握

5.《算法设计与分析》试题库

《算法分析与设计》试题库 (一) 一、 选择题 1.应用Johnson 法则的流水作业调度采用的算法是(D ) A. 贪心算法 B.分支限界法 C.分治法 B. void hanoi(int n, int A, int B, int C) { if (n > 0) { hanoi(n-1, A, C, B); move( n, a,b); hanoi(n-1, C, B, A); 2.Hanoi 塔问题如下图所示。现要求将塔座A 上的的所有圆盘移到塔座 B 上,并 D.动态规划算法

3. 动态规划算法的基本要素为(C) A. 最优子结构性质与贪心选择性质 B ?重叠子问题性质与贪心选择性质 C.最优子结构性质与重叠子问题性质

D.预排序与递归调用 4. 算法分析中,记号0表示(B),记号0表示(A),记号。表示(D) A. 渐进下界 B. 渐进上界 C. 非紧上界 D. 紧渐进界 E. 非紧下界 5. 以下关于渐进记号的性质是正确的有:(A) A. f(n) - P(g(n)),g(n) - 心(h(n))二f(n) - P(h(n)) B. f(n) =0(g(n)),g(n) =0(h(n))二h(n) =0(f(n)) C. O(f(n ))+0(g( n)) = O(mi n{f(n ),g( n)}) D. f(n) =0(g(n)) = g(n) -0(f (n)) 6?能采用贪心算法求最优解的问题,一般具有的重要性质为:(A) A. 最优子结构性质与贪心选择性质 B ?重叠子问题性质与贪心选择性质 C. 最优子结构性质与重叠子问题性质 D. 预排序与递归调用 7.回溯法在问题的解空间树中,按(D)策略,从根结点出发搜索解空间树。 A. 广度优先 B.活结点优先 C.扩展结点优先 D.深度优先

浙教版七年级数学下册多项式的乘法作业练习

3.3 多项式的乘法 一.选择题(共4小题) 1.已知(x﹣m)(x+n)=x2﹣3x﹣4,则m﹣n的值为() A.1 B.﹣3 C.﹣2 D.3 2.(x2+ax+8)(x2﹣3x+b)展开式中不含x3和x2项,则a、b的值分别为()A.a=3,b=1 B.a=﹣3,b=1 C.a=0,b=0 D.a=3,b=8 3.若2x3﹣ax2﹣5x+5=(2x2+ax﹣1)(x﹣b)+3,其中a、b为整数,则a+b之值为何?()A.﹣4 B.﹣2 C.0 D.4 4.下列计算错误的是() A.(x+a)(x+b)=x2+(a+b)x+ab B.(x+a)(x﹣b)=x2+(a+b)x+ab C.(x﹣a)(x+b)=x2+(b﹣a)x+(﹣ab) D.(x﹣a)(x﹣b)=x2﹣(a+b)x+ab 二.填空题(共8小题) 5.若(x+1)(x+a)展开是一个二次二项式,则a= 6.定义运算:a⊕b=(a+b)(b﹣2),下面给出这种运算的四个结论:①3⊕4=14;②a⊕b=b⊕a; ③若a⊕b=0,则a+b=0;④若a+b=0,则a⊕b=0.其中正确的结论序号为.(把 所有正确结论的序号都填在横线上) 7.已知m+n=3,mn=﹣6,则(1﹣m)(1﹣n)= . 8.已知(3x﹣p)(5x+3)=15x2﹣6x+q,则p+q= . 9.如图,正方形卡片A类、B类和长方形卡片C类各若干张,如果要拼一个长为(a+3b),宽为(2a+b)的长方形,则需要C类卡片张. (第9题图) 10.一个三角形的底边长为(2a+6b),高是(3a﹣5b),则这个三角形的面积是.11.计算下列各式,然后回答问题. (a+4)(a+3)= ;(a+4)(a﹣3)= ; (a﹣4)(a+3)= ;(a﹣4)(a﹣3)= .

精选方案策划合集5篇

精选方案策划合集5篇 方案策划篇1 一、日本寿司店的总体目标 2. 产品定价及收入目标 产品定价寿司:甜鸡蛋寿司 12元加州反卷寿司12元烤鳗鱼寿司 12元樱花反卷寿司12元香辣牛肉寿司12元鱼松蟹棒寿司12元鱼松火腿寿司12元金枪鱼寿司8元球生菜寿司8元紫薯红薯寿司8元鱼松寿司 8元红心蛋黄寿司 8元飞鱼子寿司8元什锦色拉寿司 7元水果寿司 7元果冻寿司 6元火腿寿司 6元手卷:黄瓜手卷 5元/2个鱼松手卷 7元/2个金枪鱼手卷7元/2个色拉手卷 7元/2个烤鳗鱼手卷7元/2个饭团:红心蛋黄饭团 5元/2个紫薯饭团 5元/2个鱼松饭团 7元/2个金枪鱼饭团7元/2个火腿饭团 7元/2个预计每日将会有50份订单,每份订单平均10元,平均每份订单成本3元利润7元。每日将获得利润10x50=500元每日将获纯利润7x50=350元 收入目标 月收入:20190.00元年收入:240000.00元 员工工资以及支出经费:40000.00元年净收入:201900.00元 3. 发展目标 将日本寿司店发展成特色小资情调的店子。主要顾客为情侣、中

高消费水平学生、喜爱日韩的女生等。 本店以优雅的环境,日本特色的风味为主打。在提供就餐的同时能享受到不一样的优质服务。且寿司分为中高档,既能满足高消费水平学生的消费欲望,同时满足一般学生的购买能力。 立志将日本寿司店在我校附近立足,并以优质传统的特色服务收揽各新老顾客。 二、市场状况分析 1. 市场需求 自然生长的稻米和最新鲜的鱼生,用极致简单又饶有趣味的生食方式组合在一起,寿司已经迅速发展成为全世界都无法抗拒的美味新宠。寿司风潮正全面来袭。走进店堂,就可以看到一碟碟的寿司由传送带传送着,从眼前回转而过。自己伸手从传送带上取下自己爱吃的寿司,最后根据所吃的碟数来结账,这就是寿司。因其价格低廉、轻松随意,已经越来越受到普通消费者的欢迎。 作为全世界正越来越风行的日本寿司,正被越来越多追求品位和健康的人所钟爱。纽约、巴黎、伦敦、悉尼、香港,时髦都市中的寿司店,门前永远不缺时髦男女耐心排长队。寿司经营店也在中国不断增长。什么原因呢?它的魅力在于:第一、口味鲜美, 而且丰富多样的品种满足了不同口味、不同喜好的人们。寿司的制作原料可谓包罗万象, 不拘一格,从鱼类、贝类到牛肉、禽蛋甚至蔬菜、瓜果都可以制成风味各异的寿司。 第二、寿司符合人们健康饮食的标准。日本饮食在养生方面具有

算法分析与设计复习题及答案

算法分析与设计复习题及答案一、单选题 1.D 2.B 3.C 4.D 5.D 6.D 7.C 8.D 9.B 10.C 11.D 12.B 13.D 14.C 15.C 16.D 17.D 18.D 19.D 20.C 1.与算法英文单词algorithm具有相同来源的单词是()。 A logarithm B algiros C arithmos D algebra 2.根据执行算法的计算机指令体系结构,算法可以分为()。 A精确算法与近似算法B串行算法语并行算法 C稳定算法与不稳定算法D32位算法与64位算法 3.具有10个节点的完全二叉树的高度是()。 A6B5C3D 2 4.下列函数关系随着输入量增大增加最快的是()。 Alog2n B n2 C 2n D n! 5.下列程序段的S执行的次数为( )。 for i ←0 to n-1 do for j ←0 to i-1 do s //某种基本操作 A.n2 B n2/2 C n*(n+1) D n(n+1)/2 6.Fibonacci数列的第十项为( )。 A 3 B 13 C 21 D 34 7.4个盘子的汉诺塔,至少要执行移动操作的次数为( )。 A 11次 B 13次 C 15次 D 17次 8.下列序列不是堆的是()。 A 99,85,98,77,80,60,82,40,22,10,66 B 99,98,85,82,80,77,66,60,40,22,10 C 10,22,40,60,66,77,80,82,85,98,99 D 99,85,40,77,80,60,66,98,82,10,22 9.Strassen矩阵乘法的算法复杂度为()。 AΘ(n3)BΘ(n2.807) CΘ(n2) DΘ(n) 10.集合A的幂集是()。 A.A中所有元素的集合 B. A的子集合 C. A 的所有子集合的集合 D. 空集 11.与算法英文单词algorithm具有相同来源的单词是()。 A logarithm B algiros C arithmos D algebra 12.从排序过程是否完全在内存中显示,排序问题可以分为()。 A稳定排序与不稳定排序B内排序与外排序 C直接排序与间接排序D主排序与辅助排序 13.下列()不是衡量算法的标准。 A时间效率B空间效率 C问题难度D适应能力 14.对于根树,出度为零的节点为()。 A0节点B根节点C叶节点D分支节点 15.对完全二叉树自顶向下,从左向右给节点编号,节点编号为10的父节点编号为()。 A0B2C4D6 16.下列程序段的算法时间的复杂度为()。 for i ←0 to n do for j ←0 to m do

多项式的乘法典型例题(整理)

多项式的乘法 多项式的乘法的法则: 一般地,多项式与多项式相乘,先用一个多项式的每一项乘以另一个多项式的每一项。然后把所得的积相加。 整式的乘法运算与化简 多项式的乘法 转化为单项式 与多项式相乘 代数式的化简求值 典型例题 一.整式的计算 1.)1-n -m )(n 3m (+ 2.若c bx ax x x ++=+-2 )3)(12(,求c b a ,,的值. 二.确定多项式中字母的值 1.多项式)32)(8x mx -+(中不含有x 的一次项,求m 的值? 2.若))(23(22q px x x x +++-展开后不含3x 和2x 项,求q p ,的值。

三.与方程相结合 解方程:8)2)(2(32-=-+x x x x 四.化简求值: 化简并求值:)3(2)42)(2(2 2--++-m m m m m ,其中2=m 五.图形应用 1.有若干张如图所示的正方形A 类、B 类卡片和长方形C 类卡片,如果要拼成一个长为(2a +b ),宽为(a +2b )的大长方形,则需要C 类卡片 张. 2.如图所示的正方形和长方形卡片若干张,拼成一个长为(a+3b ),宽为(2a+b )的矩形,需要这三类卡片共________ 张. 3.如图,在边长为a 的正方形中挖掉一个边长为b 的小正方形,把余下的部分剪成两个直角梯形后,再拼成一个长方形,通过计算阴影部分的面积,验证了一个等式,这个等式是( ) A .a 2-b 2=(a +b )(a -b ) B .(a +b )2=a 2+2ab +b 2 C .(a -b )2=a 2-2ab +b 2 D .a 2-ab =a (a -b )

【实用】工作计划合集六篇

【实用】工作计划合集六篇 工作计划篇1 为了贯彻落实“安全第一,预防为主,综合治理”的方针,强化安全生产目标管理。结合工厂实际,特制定20xx年安全生产工作计划,将安全生产工作纳入重要议事日程,警钟长鸣,常抓不懈。 一、下半年目标 实现下半年无死亡、无重伤、无重大生产设备事故,无重大事故隐患,工伤事故发生率低于厂规定指标,综合粉尘浓度合格率达80%以上(如下表)。 二、指导思想 要以公司对20xx年安全生产目标管理责任为指导,以工厂安全工作管理制度为标准,以安全工作总方针“安全第一,预防为主。”为原则,以车间、班组安全管理为基础,以预防重点单位、重点岗位重大事故为重点,以纠正岗位违章指挥,违章操作和员工劳动保护穿戴为突破口,落实各项规章制度,开创安全工作新局面,实现安全生产根本好转。 三、牢固树立“安全第一”的思想意识 各单位部门要高度重视安全生产工作,把安全生产工作作为重要的工作来抓,认真贯彻“安全第一,预防为主”的方针,进一步增强安全生产意识,出实招、使真劲,把“安全第一”的方

针真正落到实处,通过进一步完善安全生产责任制,首先解决领导意识问题,真正把安全生产工作列入重要议事日程,摆到“第一”的位置上,只有从思想上重视安全,责任意识才能到位,才能管到位、抓到位,才能深入落实安全责任,整改事故隐患,严格执行“谁主管,谁负责”和“管生产必须管安全”的原则,力保安全生产。 四、深入开展好安全生产专项整治工作 根据工厂现状,确定出20xx年安全生产工作的重点单位、重点部位,完善各事故处理应急预案,加大重大隐患的监控和整改力度,认真开展厂级月度安全检查和专项安全检查,车间每周进行一次安全检查,班组坚持班中的三次安全检查,并要求生产科、车间领导及管理人员加强日常安全检查,对查出的事故隐患,要按照“三定四不推”原则,及时组织整改,暂不能整改的,要做好安全防范措施,尤其要突出对煤气炉、锅炉、硫酸罐、液氨罐等重要部位的安全防范,做好专项整治工作,加强对易燃易爆、有毒有害等危险化学品的管理工作,要严格按照《安全生产法》、《危险化学品安全管理条例》强化专项整治,加强对岗位现场的安全管理,及时查处违章指挥,违章操作等现象,限度降低各类事故的发生,确保工厂生产工作正常运行。 五、继续加强做好员工安全教育培训和宣传工作 工厂采取办班、班前班后会、墙报、简报等形式,对员工进行安全生产教育,提高员工的安全生产知识和操作技能,定期或

《算法分析与设计》期末试题及参考答案

《算法分析与设计》期末试题及参考答案 一、简要回答下列问题: 1.算法重要特性是什么? 1.确定性、可行性、输入、输出、有穷性 2. 2.算法分析的目的是什么? 2.分析算法占用计算机资源的情况,对算法做出比较和评价,设计出额更好的算法。 3. 3.算法的时间复杂性与问题的什么因素相关? 3. 算法的时间复杂性与问题的规模相关,是问题大小n的函数。 4.算法的渐进时间复杂性的含义? 4.当问题的规模n趋向无穷大时,影响算法效率的重要因素是T(n)的数量级,而其他因素仅是使时间复杂度相差常数倍,因此可以用T(n)的数量级(阶)评价算法。时间复杂度T(n)的数量级(阶)称为渐进时间复杂性。 5.最坏情况下的时间复杂性和平均时间复杂性有什么不同? 5. 最坏情况下的时间复杂性和平均时间复杂性考察的是n固定时,不同输入实例下的 算法所耗时间。最坏情况下的时间复杂性取的输入实例中最大的时间复杂度: W(n) = max{ T(n,I) } , I∈Dn 平均时间复杂性是所有输入实例的处理时间与各自概率的乘积和: A(n) =∑P(I)T(n,I) I∈Dn 6.简述二分检索(折半查找)算法的基本过程。 6. 设输入是一个按非降次序排列的元素表A[i:j] 和x,选取A[(i+j)/2]与x比较, 如果A[(i+j)/2]=x,则返回(i+j)/2,如果A[(i+j)/2]

数据结构 多项式乘法

实习报告 一、实习题: 请写出计算两个以单链接表表示的多项式相乘的程序。 1.需求分析和说明 两个多项式相乘,可以利用两个多项式的加法来实现,因为乘法运算可以分 解为一系列的加法运算:C(x)=A(x)*B(x)=A(x)*(b1x+b2x2+…+b n x n)=∑ = n i i i x b x A 1 ) ( 先用其中一个多项式去乘以另一个多项式的每一项,得出的若干个多项式按照一定的顺序相加,即幂不同的按照升幂排列,幂相同的将系数相加。 例如: 对于(X->1+2X->2)*(2X->2+4X->3). X->1*(2X->2+4X->3)=2X->3+4X->4; 2X->2*(2X->2+4X->3)=4X->4+8X->5; 排列结果:2X->3+8X-4+8X->5 2.设计 用两个单链表的存储两个多项式,每个结点包含单项式的系数,幂和指向下一个元素地址的指针。用其中的一个多项式乘以另一个多项式的每一项,随后将所得结果按照升幂顺序排列,最后得到结果。 存储结构: //单项式结构 struct Term { float coef; // 系数。 int exp; // 幂指数。 Term( float c, int e) { coef = c; exp = e;} Term( ) { } friend int operator == (const Term & L, const Term & T ) { return L.exp == T.exp; } friend int operator > (const Term & L, const Term & T ) { return L.exp > T.exp; } friend int operator < (const Term & L, const Term & T ) { return L.exp < T.exp; } friend Term & operator += ( Term & L, const Term & T ) { L.coef += T.coef; return L; } //幂指数相同,则系数相加。 friend Term & operator *=(Term &L, const Term &T){ //实现单项式乘法 L.coef*=T.coef; L.exp+=T.exp;

【精选】计划方案合集9篇

【精选】计划方案合集9篇 计划方案合集9篇 为有力保证事情或工作开展的水平质量,时常需要预先制定一份周密的方案,方案是从目的、要求、方式、方法、进度等方面进行安排的书面计划。那么大家知道方案怎么写才规范吗?以下是小编为大家收集的计划方案9篇,仅供参考,大家一起来看看吧。计划方案篇1 一指导思想深入学习《幼儿园教育指导纲要》,深刻把握《纲要》精髓,高举素质教育的旗帜,扮演好教师的多重角色,充分认知和尊重幼儿生命特性,遵循幼儿身心发展规律和学习特点,自觉创造与生命相和谐、与个体生命相一致的教育;在“存精、吸纳、创新”的课程研究总原则下,突显语言特色,坚持课程与课题研究整合相融求效益,不断深化园本课程建设,推动教育科研向纵深发展。 二、工作目标 1、立足实际,深入课改,把《纲要》精神转化为实际的、科学的教育实践能力,促进教师专业化成长。 2、突显我园语言教育特色,向全市展示教育成果。 3、开拓教育资源,在有目的、有准备的生活实践中提高幼儿语言交往能力。三、具体内容及措施(一)立足实际,在课改中促进教师的专业化成长以本园实际为基点的课程改革和课程实施是最具说服力和生命力的,脚踏实地研究课程的过程本身就是一个促进教师专业化成长的过程。 1、咀嚼消化有关理论,厚实实践基础随着终身教育的提出和学习化社会的到来,基础教育的功能正在被重新定义。我们必须根据新的基础教育理念来调整幼儿教育的价值取向,在社会和教育的整体结构中,正确而清醒地把握幼教的实践方向。要求教师根据新的基础教育理念来审视和反思自己的工作,自觉地规范自己的教育行为,理性地构建自己的教育观念。学习重点:《从理念到行为——幼儿园教育指导纲要行动指南》、《儿童的一百种语言解读》、有关幼儿语言教育的最新理论等。学习形式:自学——小组研讨——园部主题性“头脑风暴”——教育实例 2、反思总结,创造性实施课程以主题形式组织、实施课程是课程实践的主要形式。我园一直使用南师大与信谊基金出版社共同出版的《幼儿园活动整合课程》,这一课程是帮助我们更好落实新《纲要》精神、将先进教育观念落实到教育行为中去

《算法分析与设计》期末考试复习题纲(完整版)

《算法分析与设计》期末复习题 一、选择题 1.算法必须具备输入、输出和( D )等4个特性。 A.可行性和安全性 B.确定性和易读性 C.有穷性和安全性 D.有穷性和确定性 2.算法分析中,记号O表示( B ),记号Ω表示( A ) A.渐进下界 B.渐进上界 C.非紧上界 D.紧渐进界 3.假设某算法在输入规模为n时的计算时间为T(n)=3*2^n。在某台计算机上实现并 完成概算法的时间为t秒。现有另一台计算机,其运行速度为第一台的64倍,那么在这台新机器上用同一算法在t秒内能解输入规模为多大的问题( B )解题方法:3*2^n*64=3*2^x A.n+8 B.n+6 C.n+7 D.n+5 4.设问题规模为N时,某递归算法的时间复杂度记为T(N),已知T(1)=1, T(N)=2T(N/2)+N/2,用O表示的时间复杂度为( C )。 A.O(logN) B.O(N) C.O(NlogN) D.O(N2logN) 5.直接或间接调用自身的算法称为( B )。 A.贪心算法 B.递归算法 C.迭代算法 D.回溯法 6.Fibonacci数列中,第4个和第11个数分别是( D )。 A.5,89 B.3,89 C.5,144 D.3,144 7.在有8个顶点的凸多边形的三角剖分中,恰有( B )。

A.6条弦和7个三角形 B.5条弦和6个三角形 C.6条弦和6个三角形 D.5条弦和5个三角形 8.一个问题可用动态规划算法或贪心算法求解的关键特征是问题的( B )。 A.重叠子问题 B.最优子结构性质 C.贪心选择性质 D.定义最优解 9.下列哪个问题不用贪心法求解( C )。 A.哈夫曼编码问题 B.单源最短路径问题 C.最大团问题 D.最小生成树问题 10.下列算法中通常以自底向上的方式求解最优解的是( B )。 A.备忘录法 B.动态规划法 C.贪心法 D.回溯法 11.下列算法中不能解决0/1背包问题的是( A )。 A.贪心法 B.动态规划 C.回溯法 D.分支限界法 12.下列哪个问题可以用贪心算法求解( D )。 A.LCS问题 B.批处理作业问题 C.0-1背包问题 D.哈夫曼编码问题 13.用回溯法求解最优装载问题时,若待选物品为m种,则该问题的解空间树的结点 个数为()。 A.m! B.2m+1 C.2m+1-1 D.2m 14.二分搜索算法是利用( A )实现的算法。 A.分治策略 B.动态规划法 C.贪心法 D.回溯法 15.下列不是动态规划算法基本步骤的是( B )。P44 A.找出最优解的性质 B.构造最优解 C.算出最优解(应该是最优值) D.定义最优解

多项式算法

#include #include #include #include #include #define NULL 0 //************************************************** typedef struct LNode { float coef;//系数 int exp;//指数 struct LNode *next; }LNode, *Polyn; //************************************************** //销毁传递过来的链表【多项式】 void DestroyPolyn(Polyn &L) { Polyn p; p=L->next; while(p) { L->next=p->next; free(p); p=L->next; } free(L); } //************************************************** /*判断指数是否与多项式中已存在的某项相同*/ int JudgeExp(Polyn L,Polyn e) { Polyn p; p=L->next; while(p!=NULL&&(e->exp!=p->exp)) p=p->next; if(p==NULL) return 0; else return 1; } //******************************************************** //创建一个项数为n的多项式,有头结点 void CreatePolyn(Polyn &L,int n)

相关文档
最新文档