求 free Pascal 就是一个背包,可以放入的重量为s.现有n件物品,重量分别为w1,w2,w3...wn,从n件中挑选若干件,使得放入背包的重量之和正好为s,找出一组解即可,无解时输出No result.输入样例5 101 2 3 4 5
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/24 00:02:50
求 free Pascal 就是一个背包,可以放入的重量为s.现有n件物品,重量分别为w1,w2,w3...wn,从n件中挑选若干件,使得放入背包的重量之和正好为s,找出一组解即可,无解时输出No result.输入样例5 101 2 3 4 5
求 free Pascal
就是一个背包,可以放入的重量为s.现有n件物品,重量分别为w1,w2,w3...wn,从n件中挑选若干件,使得放入背包的重量之和正好为s,找出一组解即可,无解时输出No result.
输入样例
5 10
1 2 3 4 5
输出样例
1 1
4 4
5 5
新手啊,被卡了好久了,谁能帮帮忙,结果没人回答.)
求 free Pascal 就是一个背包,可以放入的重量为s.现有n件物品,重量分别为w1,w2,w3...wn,从n件中挑选若干件,使得放入背包的重量之和正好为s,找出一组解即可,无解时输出No result.输入样例5 101 2 3 4 5
const n=5;
var w:array[1..n] of integer;
v:array[1..n] of integer;
k:integer;
function max(m,n:integer):integer;
begin
if m>n then
max:=m
else
max:=n;
end;
function maxval(i,aw:integer):integer;
begin
if i=1 then
if w[i]<=aw then
maxval:=v[i]
else
maxval:=0
else
maxval:=max(maxval(i-1,aw),maxval(i-1,aw-w[i])+v[i]);
end;
begin
for k:=1 to n do
read(w[k]);
readln;
for k:=1 to n do
read(v[k]);
write(maxval(n,15));
end.
以上程序是递归的写法.还可以去研究动态规划的写法.
上面回答是背包问题求最优值的常用写法.至于你的问题不涉及到求最优值,只是关注是否存在满足重量的组合问题,代码如下.
var w : array[1..10] of integer ;
x,y ,i:integer ; f : boolean ;
Function beibao( s, n : integer ) : boolean ;
var k : integer ;
begin
if s=0 then beibao:=true
else if (s<0) or (S>0) and (n<1) then beibao:=false
else begin
if beibao(s-w[n],n-1) then begin
writeln( n:5, w[n]:5) ;
beibao:=true;
end
else beibao:=beibao(s,n-1)
end;
end;
begin
readln(y) ;
readln( x) ;
for I:=1 to y do read(w[I]);
f:=beibao(x,y);
if not(f) then writeln( 'not find') ;
end.
以上两段代码是对背包问题常见的问题解决.
程序经过本人测试,绝对能运行而且结果正确.
经常看到网上回答的网友写程序完全主观想象随意去写,不调试其正确性,本意是帮助别人是好的,可是缺乏严谨,往往让问问题的朋友耽误很多时间.有的写得太随意,更是让问问题的朋友不知所云.还有到处从别处复制代码粘贴过来,更是缺少诚恳助人之心.
希望回答问题的朋友,尽量更加严谨一点,让百度知道真正成为一个让中国人更加方便学习的地方,让中国人多掌握科学知识,从而提升综合国力.