2023年分割槽聯賽普級組之三 採藥

2021-07-11 02:00:05 字數 1955 閱讀 7166

description

辰辰是個天資聰穎的孩子,他的夢想是成為世界上最偉大的醫師。為此,他想拜附近最有威望的醫師為師。醫師為了判斷他的資質,給他出了乙個難題。醫師把他帶到乙個到處都是草藥的山洞裡對他說:「孩子,這個山洞裡有一些不同的草藥,採每一株都需要一些時間,每一株也有它自身的價值。我會給你一段時間,在這段時間裡,你可以採到一些草藥。如果你是乙個聰明的孩子,你應該可以讓採到的草藥的總價值最大。」 

如果你是辰辰,你能完成這個任務嗎? 

input

輸入的第一行有兩個整數t(1 <= t <= 1000)和m(1 <= m <= 100),用乙個空格隔開,t代表總共能夠用來採藥的時間,m代表山洞裡的草藥的數目。接下來的m行每行包括兩個在1到100之間(包括1和100)的整數,分別表示採摘某株草藥的時間和這株草藥的價值。 

output

輸出包括一行,這一行只包含乙個整數,表示在規定的時間內,可以採到的草藥的最大總價值。 

sample input

70 3 

71 100 

69 1 

1 2

sample output

3

hint

對於30%的資料,m <= 10; 

對於全部的資料,m <= 100。

解題思路1: 

a[i,j]

表示前i

件物品放入乙個容量為

j的揹包可以獲得的最大價值,狀態轉移方程為:

a[i,j]=max

a[n,m]即為所求。、

時間複雜度:

o(nm)

程式1:

vara:array[0..100,0..1000]of longint;

b,c:array[1..100]of longint;

m,n,i,j:longint;

function max(x,y:longint):longint;

begin

if x>y then exit(x);

exit(y);

end;

begin

readln(m,n);

for i:=1 to n do

readln(b[i],c[i]);

for i:=1 to n do

for j:=1 to m do

if j>=b[i] then a[i,j]:=max(a[i-1,j-b[i]]+c[i],a[i-1,j])

else a[i,j]:=a[i-1,j];

writeln(a[n,m]);

end.

解題思路2:

a[j]

a[i,j]

,狀態轉移方程為:

a[j]=max

(1<=i<=n,m>=j>=0)

a[m]即為所求。

時間複雜度:

o(nm)

程式2:

varn,m,i,j:longint;

f,w,v:array[0..1000]of longint;

function max(a,b:longint):longint;

begin

if a>b then exit(a) else exit(b);

end;

begin

readln(m,n);

for i:=1 to n do

readln(w[i],v[i]);

for i:=1 to n do

for j:=m downto 0 do

if j>=w[i] then f[j]:=max(f[j],f[j-w[i]]+v[i]);

writeln(f[m]);

end.

版權屬於: chris

2023年分割槽聯賽普級組之三 乘積最大

2000年分割槽聯賽普級組之三 乘積最大 time limit 1000ms memory limit 65536k total submit 222 accepted 146 description 今年是國際數學聯盟確定的 2000 世界數學年 又恰逢我國著名數學家華羅庚先生誕辰90周年。在華羅...

2023年分割槽聯賽普級組之三 乘積最大

2000年分割槽聯賽普級組之三 乘積最大 time limit 1000ms memory limit 65536k total submit 229 accepted 153 description 今年是國際數學聯盟確定的 2000 世界數學年 又恰逢我國著名數學家華羅庚先生誕辰90周年。在華羅...

2023年分割槽聯賽普級組之三 產生數

description 給出乙個整數 n n 10 30 和 k 個變換規則 k 15 規則 一位數可變換成另乙個一位數 規則的右部不能為零。例如 n 234。有規則 k 2 2 5 3 6 上面的整數 234 經過變換後可能產生出的整數為 包括原數 234 534 264 564 共 4 種不同的...