题目概述
给定时间t,草药数n,采每组草药所需的时间a[i]和该组草药的价值b[i],求在给定的时间内能采到的草药的最大价值。每种草药可以无限采。
n<=10000,且n*t<10^7
解题思路
我们知道,对于这类背包问题,时间复杂度为(n*t)在题目所给的范围内不会超时,方法与01背包一致,不过扫描的顺序相反。
时间复杂度:O(n*t)
空间复杂度:O(t)
源程序
var
a:array[0..100002]of longint;
i,n,j,x,y,t:longint;
begin
readln(t,n);
for i:=1 to n do
begin
readln(x,y);
for j:=t-x downto 0 do
if a[j+x]+y>a[j] then a[j]:=a[j+x]+y;
end;
write(a[0]);
end.