特長生模擬 採藥

2021-08-01 11:57:20 字數 1324 閱讀 1423

題目大意:

凡凡要去採藥,他採的藥不僅要求揹包的總空間v能放得下所採的藥,還要求藥草的總質量不能超過凡凡所能承受的範圍m。現在給出n種珍惜的藥材,對於每個藥材凡凡都會精準地目測出其質量a[i]、體積b[i]和價值c[i],求凡凡所能採到的藥材的最大價值。

注意:每種藥材只有乙個。

30%資料,所有藥草質量a[i]=1。

100%資料,m,v<=300,n<=100。

ps:

1.所有藥草的質量、體積分別小於m和v,它的價值小於2^30。

2.最大價值可能很大,但不超過2^63。

題解:

dp:

f[k,i,j]表示前k個物品,用了i的質量,j的體積可以獲得的最大價值。

滿足條件i>=a[k],j>=b[k]時

f[k,i,j]:=max(f[k-1,i,j],f[k-1,i-a[k],j-b[k]]+c[k])

否則就直接

f[k,i,j]=f[k-1,i,j]

注意資料範圍要開int64,c++要開longlong

var

f:array [0..101,0..301,0..301] of int64;

a,b,c:array [0..101] of longint;

i,j,k,n,m,v:longint;

function

max(aa,bb:int64):int64;

begin

if aa>bb then

exit(aa);

exit(bb);

end;

begin

assign(input,'medic.in'); reset(input);

assign(output,'medic.out'); rewrite(output);

readln(m,v,n);

for i:=1

to n do readln(a[i],b[i],c[i]);

for k:=1

to n do

for i:=0

to m do

for j:=0

to v do

begin

f[k,i,j]:=f[k-1,i,j];

if (i>=a[k]) and (j>=b[k]) then

f[k,i,j]:=max(f[k,i,j],f[k-1,i-a[k],j-b[k]]+c[k]);

end;

writeln(f[n,m,v]);

close(input); close(output);

end.

特長生模擬 BIOtech(模擬)

2.1 題目描述 bob 發現了一群有趣的細胞。這群細胞排列成乙個n m 的矩陣。每個細胞有兩個狀態 放電狀態和平靜 狀態。它們每秒鐘都會按以下的規則轉換狀態 首先我們定義,乙個細胞的鄰居為它周圍的8 個細胞。同時設k 為某乙個細 胞的處於放電狀態的鄰居的個數。若k 2,則這個細胞在下一秒因電量不足...

5 14特長生模擬 朋友

mxy 即將前往新世界。在前往新世界的過程中,ta 遇見了兩種人。一種是只和lowb 做朋友,即當且僅當自己 的能力值大於對方時他們會成為朋友,另一種是大神我們做朋友,即當且僅當自己的能力 值小於對方時他們會成為朋友。現在告訴你兩種人的能力值。請你計算一共有多少對友好關係。排序 二分,因為排好序了,...

5 14特長生模擬 門票

mxy 正要經過新世界的大門。現在有很多人在門口排隊,每個人將會被發到乙個有效的通行密碼作為門票。乙個有 效的密碼由l 3 l 15 個小寫字母 a z 組成,至少有乙個母音 a e i o 或 u 和兩個子音 除去母音以外的音節 並且是按字母表順序出現的 例如,abc 是有效的,而 bac 不是 ...