題目大意:
凡凡要去採藥,他採的藥不僅要求揹包的總空間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 不是 ...