有n種遊戲平台,每一種遊戲平台的**是p_i,並且每一種遊戲平台有g_i個只能在這種平台上執行的遊戲。
必須先買進一種遊戲平台,才能買進在這種遊戲平台上執行的遊戲。
每乙個遊戲有乙個遊戲的**gp_j,並且有乙個產出值pv_j,表示乙隻牛在玩這個遊戲之後會產出多少牛奶。
最多可以花費的金錢為v,求獲得的產出值的和最大是多少。
1 <= n <= 50
1 <= p_i <= 1000
1 <= g_i <= 10
1 <= gp_j ** <= 100
1 <= pv_j<= 1000000
1 <= v <= 100000
這題應該很容易就想到用dp去做:
怎麼實現呢?
①我們設f[i,j]表示前i個遊戲平台用了j元能獲得的最大產出值!
不過這樣很明顯無法做到最優,因為存在可選可不選的情況,所以我們考慮這2中情況可以設狀態轉移方程:
f[i,j,1]表示前i個遊戲平台用了j元,且不選第i個遊戲平台的最大產出值。
f[i,j,2]則表示選了第i個遊戲平台的最大產出值.
然後 f[i,j,1]=max(f[i-1,j,1],f[i-1,j,2])
f[i,j,2]的初值則為max(f[i-1,j-p[i],1],f[i-1,j-p[i],2])
後面對f[i,j,2]的轉移
就可以得出
f[i,j,2]=max(f[i,j,2],f[i,j-gp_k,2]+pv_k)
var
f:array [0..51,0..100001,1..2] of longint;
p,c,x,y,i,j,n,m,k:longint;
function
max(aa,bb:longint):longint;
begin
if aa>bb then
exit(aa);
exit(bb);
end;
begin
assign(input,'vidgame.in'); reset(input);
assign(output,'vidgame.out'); rewrite(output);
readln(n,m);
for i:=0
to m do
for j:=1to2
do f[1,i,j]:=-maxlongint;
for i:=1
to n do
begin
read(p,c);
for j:=0
to m do
begin
f[i,j,1]:=max(f[i-1,j,1],f[i-1,j,2]);
if jthen f[i,j,2]:=-maxlongint
else f[i,j,2]:=max(f[i-1,j-p,1],f[i-1,j-p,2]);
end;
for k:=1
to c do
begin
read(x,y);
for j:=m downto x do
f[i,j,2]:=max(f[i,j-x,2]+y,f[i,j,2]);
end;
readln;
end;
writeln(max(f[n,m,1],f[n,m,2]));
close(input); close(output);
end.
編譯安裝Nginx 1 5 9
2.執行解壓縮命令 tar zxvf nginx 1.5.9.tar.gz 3.進入解壓後的資料夾,執行 configure prefix export servers nginx 1.5.9。發現報錯 statically from the source with nginx by using w...
15 9 程序間通訊 共享儲存
因為資料不需要在客戶程序和伺服器程序之間複製,所以共享儲存是最快的一種ipc。使用共享儲存時要掌握的唯一竅門是多個程序之間對一給定儲存區的同步訪問。通常,訊號量或記錄鎖被用來實現對共享儲存訪問的同步。返回值 若成功則返回指向共享儲存的指標,若出錯則返回 1 shmget獲得乙個共享儲存識別符號。si...
159 按鍵精靈 設定模擬方式
模擬方式 分為 普通模擬 硬體模擬 超級模擬 三個部分。普通模擬 通過軟體模擬鍵盤跟滑鼠 硬體模擬 通過硬體模擬鍵盤跟滑鼠,解決某些軟體不支援軟體模擬的問題。注意 目前不支援usb裝置。超級模擬 通過驅動模擬鍵盤跟滑鼠,解決某些軟體不支援軟體模擬的問題。注意 支援usb裝置。指令碼例子 模擬方式 0...