填空题

[说明2]
[C程序代码2]是能求得“背包问题”的一组解的递归算法程序。“背包问题”的基本描述是:有一个背包,能盛放的物品总重量为S,设有Ⅳ件物品,其重量分别为W1,W2,…,Wn,希望从N件物品中选择若干件物品,所选物品的重量之和恰能放入该背包中,即所选物品的重量之和等于S。
[C程序代码2]
BTREE;
#include<stdio.h>
#define N 7
#define S 15
int w[N+1] = 0,1,4,3,4,5,2,7;
int knap ( int S, int n)
if (S == 0)
return 1 ;
if ( s<0 ( s>0 && n<1 )
return 0 ;
if ( (1) ) )
printf( "4d",w[n] );
return 1 ;

return (2) ;
main ()
if (knap(S,N) )
printf( "OK!\n" );
else
printf ( "N0 ! \n" ) ;

请将[C程序代码2]中空缺处的内容填补完整。

【参考答案】

knap(s-w[n],n-A)或其等价形式
(B) knap(s,n-A)或其等价形式
热门 试题

填空题
[说明] 某绘图系统中有两个画矩形的程序DP1和DP2。程序DP1用函数draw_a_line(x1,y1,x2,y2)画一条直线,程序DP2则用函数drawline(x1,x2,y1,y2)画一条直线。当实例化矩形时,确定使用DP1还是DP2。为了适应变化,包括“不同类型的形状”和“不同类型的画图程序”,将抽象部分与实现部分分离,使它们可以独立地变化。若将“抽象部分”对应“形状”,“实现部分”对应“画图”,与一般的接口(抽象方法)和具体实现不同,则将这种应用称为Bridge(桥接)模式。图8-10显示了该系统与矩形绘制相关的各个类之间的关系。系统始终只处理3个对象:Shape对象、Drawing对象,以及DP1或DP2对象。以下是Java语言实现,能够正确编译通过。 [Java代码] DP1.java文件 public class DP1 static public void draw a line(double x1,double y1,double x2,double y2) ... 省略具体实现 DP2.java文件 public class DP2 static public void drawline(double x1,double y1,double x2,double y2) ... 省略具体实现 Drawing. java文件 abstract public class Drawing (1) public void drawLine(double x1,double y1,double x2,double y2); V1Drawing.java文件 public class V1Drawing extends Drawing public void drawLine(double x1,double y1,double x2,double y2) DP1.draw a line(x1,y1,x2,y2); V2Drawing.java文件 public class V2Drawing extends Drawing public void drawLine(double x1,double y1,double x2,double y2) 画一条直线 (2) ; Shape.java文件 abstract public class Shape( abstract public void draw(); private (3) dp; Shape(Drawing dp) _dp=dp; protected void drawLine(double x1,double y1,double x2, double y2) (4) ; Rectangle.java文件 public class Rectangle (5) private double _x1,_x2,_y1,_ y2; public Rectangle(Drawing dp, double x1,double y1, double x2,double y2) (6) ; _x1=x2; _x2=x2; _y1=y1; _y2=y2; public void draw() … 省略具体实现