我是这写的:
var
sh,w,max:array[0..1000]of longint;
l:array[0..1000,0..1000]of longint;
j,d,tt,n,i,y,u:longint;
begin
read(tt,n);
for i:=1 to n do
read(sh[i],w[i]);
max[0]:=0;
for u:=1 to n do
for i:=tt downto 1 do
if i>=sh[u] then if max[i-sh[u]]+w[u]>max[i] then max[i]:=max[i-sh[u]]+w[u];
write(max[tt]);
end.