讨论 / 数据没问题吧?
OElement 2008-03-01 07:54:00
点我顶贴 收藏 删除
感觉有组数据不太对的样子.....青弟是这样么

小小Cheat 了一下....

#1 wxfred@2008-03-01 06:03:00
回复 删除
没问题

program dp;

type

arr=array[1..30000] of integer;

var

a,b:array[1..25] of longint;

l:array[1..30000] of integer;

f:array[0..30000] of longint;

n,m,i,link,maxn:longint;

function max(p,q:longint):longint;

begin

if p>q then exit(p)

else exit(q);

end;

procedure quick(var l:arr;lx,rx:longint);

var

i,j,x,p:longint;

begin

i:=lx; j:=rx;

x:=l[i+random(j-i)+1];

repeat

while l[i]<x do inc(i);

while l[j]>x do dec(j);

if i<=j then

begin

p:=l[i]; l[i]:=l[j]; l[j]:=p;

inc(i); dec(j);

end;

until i>j;

if lx<j then quick(l,lx,j);

if i<rx then quick(l,i,rx);

end;

procedure dynamic;

var

i,j,k:longint;

begin

link:=1;

l[1]:=0;

for i:=1 to m do

begin

k:=link;

for j:=link downto 1 do

begin

if l[j]+a[i]<=n then

begin

if f[l[j]+a[i]]=0 then

begin

inc(k);

l[k]:=l[j]+a[i];

end;

f[l[j]+a[i]]:=max(f[l[j]+a[i]],f[l[j]]+b[i]);

end;

end;

link:=k;

quick(l,1,link);

end;

for i:=1 to n do maxn:=max(maxn,f[i]);

write(maxn);

end;

begin

read(n,m);

for i:=1 to m do

begin

read(a[i],b[i]);

b[i]:=a[i]*b[i];

end;

dynamic;

end.

#2 fjxmlhx@2008-03-01 07:54:00
回复 删除
搜索。。很好很强大

我的DP。。

var

js,n,m,i,j:longint;

d,a,b,c:array[1..25] of longint;

p:array[0..30000] of longint;

begin

read(m);readln(n);

for i:=1 to n do begin read(a[i]);read(b[i]);readln;end;

for i:=1 to n do

for j:=m downto a[i] do

begin

if p[j-a[i]]+b[i]*a[i]>=p[j] then p[j]:=p[j-a[i]]+b[i]*a[i]

else p[j]:=p[j];

end;

write(p[m]);

end.

查看更多回复
提交回复