作业帮 > 综合 > 作业

Pascal改错逛街    背景 Background      &n

来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/04/27 21:09:33
Pascal改错
逛街    
背景
Background    
      
NOIP2009泰州二附中第二次模拟赛
   
描述
Description     
      
某天,ZCL在街上闲逛.他在超市里看到促销广告:商品大降价.于是他很高兴地拿着篮子购物去了.
 
已知商场内有n种商品.每种商品的重量为w千克,价格为v.价值为t.此种商品有h件.
注意.此商场有一个奇怪的规定.每种物品要么不买,要么买1件或h件.
ZCL带了y元.ZCL最多能扛x千克的物品.
请帮ZCL求出他最多能获得的价值.(不允许抢劫)
   
输入格式 Input
Format    
      
输入文件shop.in的第一行有3个用空格隔开的整数n、x和y.
接下来的n行,每行有4个数据,分别为w、v、t和h.
   
输出格式 Output
Format    
      
输出文件shop.out共一行,表示ZCL最多能获得的价值.   
样例输入 Sample
Input     
      
2 8 10
5 3 7 1
3 7 10 1
   
样例输出 Sample
Output     
      
17
   
时间限制 Time
Limitation    
      
各个测试点1s
   
注释
Hint    
      
【限制】
100%的数据满足:0<=n<=300,0<=x<=100,0<=y<=100,0<=h<=10
   
    程序如下:

var m,n,j,i,r,k:longint;
    v,c,w,h:array[1..300] of longint;
    f:array[0..300,0..100,0..100] of longint;
function max(x,y:longint):longint;
 begin
 if x>y then max:=x else max:=y;
end;
begin
readln(n,m,r);
 for i:=1 to n do   readln(w[i],v[i],c[i],h[i]);
 fillchar(f,sizeof(f),0);
 for i:=1 to n do   for j:=1 to m do for k:=1 to r do   begin
 if (j>=w[i]*h[i]) and (k>=v[i]*h[i]) then
  f[i,j,k]:=max(f[i-1,j-w[i]*h[i],k-v[i]*h[i]]+c[i]*h[i],f[i-1,j,k]);
  if (j>=w[i]) and (k>=v[i]) then f[i,j,k]:=max(f[i-1,j-w[i],k-v[i]]+c[i],f[i-1,j,k]) else

  f[i,j,k]:=f[i-1,j,k];
 end;
 writeln(f[n,m,r]);
end.

过了五个点.求改错.
Pascal改错逛街    背景 Background      &n
输入数据
3 1 10
0 1 10 1
1 1 10 1
9 99 999 9999
错误输出
10
LZ可以把 ”for i:=1 to n do for j:=1 to m do for k:=1 to r do“ 循环改成 “for i:=1 to n do for j:=0 to m do for k:=0 to r do”或者直接改成 “for i:=1 to n do for j:=w[i] to m do for k:=v[i] to r do”因为输入数据可能有一种物品没有重量却有价值、、、
下面是我的程序,由于找不到评测网站就没办法贴上评测结果了╮(╯▽╰)╭.
var f:array[0..100,0..100]of longint;
i,j,k,m,n,x,y,ans,w,v,t,h:longint;
function max(a,b:longint):longint;
begin
if a>b then exit(a)
else exit(b);
end;
begin
readln(n,x,y);
i:=0;
fillchar(f,sizeof(f),0);
for i:=1 to n do
begin
readln(w,v,t,h);
for j:=x downto w do
for k:=y downto v do
begin
f[j,k]:=max(f[j,k],f[j-w,k-v]+t);
if(j>=w*h)and(k>=v*h)then
f[j,k]:=max(f[j,k],f[j-w*h,k-v*h]+t*h);
end;
end;
writeln(f[x,y]);
end.