切换到宽版
  • 8226阅读
  • 8回复

help!!! [复制链接]

上一主题 下一主题
离线dai2012
 
只看楼主 正序阅读 0 发表于: 2007-11-13
金明的预算方案  不会了  答案  教教我
离线zhitiancheng
只看该作者 8 发表于: 2008-02-17
var
  n,m,i,j,k:longint;
  v,w,v1,w1,v2,w2,x,p,q,a:array[1..60] of longint;
  f:array[0..1,0..32000] of longint;
begin
  assign(input,'budget.in');reset(input);
  assign(output,'budget.out');rewrite(output);
  read(n,m);
  for i:=1 to m do
  begin
    read(x,p,q);
    if q=0 then begin inc(j);v[j]:=x;w[j]:=v[j]*p;a:=j;end;
  end;
  for i:=1 to m do
    if q>0 then
      if v1[a[q]]=0 then begin v1[a[q]]:=x;w1[a[q]]:=v1[a[q]]*p;end
      else begin v2[a[q]]:=x;w2[a[q]]:=v2[a[q]]*p;end;
  m:=j;
  for i:=1 to m do
  begin
    for j:=1 to n do
    begin
      if (j>=v)and(f[0,j-v]+w>f[1,j]) then f[1,j]:=f[0,j-v]+w;
      if (j>=v+v1)and(f[0,j-v-v1]+w+w1>f[1,j]) then
        f[1,j]:=f[0,j-v-v1]+w+w1;
      if (j>=v+v2)and(f[0,j-v-v2]+w+w2>f[1,j]) then
        f[1,j]:=f[0,j-v-v2]+w+w2;
      if (j>=v+v1+v2)and(f[0,j-v-v1-v2]+w+w1+w2>f[1,j])
        then f[1,j]:=f[0,j-v-v1-v2]+w+w1+w2;
    end;
    f[0]:=f[1];
  end;
  writeln(f[1,n]);
  close(input);close(output);
end.
离线xyj
只看该作者 7 发表于: 2008-02-02
代码不要照抄,里面缺[i]的
因为论坛里的WIND CODE吃代码
离线绝世衰神
只看该作者 6 发表于: 2008-02-02
用动态规划做
天生我材必有用
老鼠儿子会打洞
离线huwentao
只看该作者 5 发表于: 2007-11-14
dp!
离线dai2012
只看该作者 4 发表于: 2007-11-13
不对啊  好象读不出来  还有50+个错误
离线dai2012
只看该作者 3 发表于: 2007-11-13
谢谢哥们
离线fchqq
只看该作者 2 发表于: 2007-11-13
program budget;
var
n,m,i,j,q:integer;
v,p,fj1,fj2:array [0..60] of longint;
max:longint;
zj:array [0..60] of boolean;
f:array [0..32000] of longint;
t:array [0..60] of boolean;
begin
assign(input,'budget.in');reset(input);assign(output,'budget.out');rewrite(output);
readln(n,m);fillchar(zj,sizeof(zj),false);
for i:=1 to m do begin
  readln(v,p,q);
  if q<>0 then if fj1[q]=0 then fj1[q]:=i else fj2[q]:=i else zj:=true;
  p:=p*v;
end;
for i:=1 to m do
  if zj then for j:=n-v downto 0 do begin
  if f[j]+p>f[j+v] then f[j+v]:=f[j]+p;
  if (fj1<>0) and (j+v+v[fj1]<=n) then if f[j]+p+p[fj1]>f[j+v+v[fj1]] then f[j+v+v[fj1]]:=f[j]+p+p[fj1];
  if (fj2<>0) and (j+v+v[fj2]<=n) then if f[j]+p+p[fj2]>f[j+v+v[fj2]] then f[j+v+v[fj2]]:=f[j]+p+p[fj2];
  if (fj1<>0) and (fj2<>0) and (j+v+v[fj1]+v[fj2]<=n) then
      if f[j]+p+p[fj1]+p[fj2]>f[j+v+v[fj1]+v[fj2]] then f[j+v+v[fj1]+v[fj2]]:=f[j]+p+p[fj1]+p[fj2];
  end;
write(f[n]);
end.
离线dai2012
只看该作者 1 发表于: 2007-11-13
提高组的阿  谢谢  详细点贝
快速回复
限100 字节
 
上一个 下一个