農夫約翰的奶牛們遊戲成癮!本來fj是想要按照陶叫獸的做法拿她們去電擊戒癮的,可是後來他發現奶牛們玩遊戲之後比原先產更多的奶。很明顯,這是因為滿足的牛會產更多的奶。
但是,奶牛們在哪個才是最好的遊戲平台這個問題上產生了巨大的分歧。乙隻奶牛想要買一台xbox 360來跑《光暈3》;另外乙隻奶牛想要一台任天堂wii來跑《任天堂明星大亂鬥x》;第三隻奶牛想要在playstation 3上面玩《潛龍諜影4》,順便還能看某些高畫質的日本電影。
fj想要在給定的預算內購入一些遊戲平台和一些遊戲,使他的奶牛們生產最多的奶牛以養育最多的孩子。
fj研究了n
nn(1 <= n
nn<= 50)種遊戲平台,每一種遊戲平台的**是p
ip_i
pi(1 <= p
ip_i
pi <= 1000),並且每一種遊戲平台有g
ig_i
gi(1 <= g
ig_i
gi<= 10)個只能在這種平台上執行的遊戲。很明顯,奶牛必須先買進一種遊戲平台,才能買進在這種遊戲平台上執行的遊戲。每乙個遊戲有乙個遊戲的**gpj
gp_j
gpj
(1 <= gpj
gp_j
gpj
<= 100)並且有乙個產出值pvj
pv_j
pvj
(1 <= pvj
pv_j
pvj
<= 1000000),表示乙隻牛在玩這個遊戲之後會產出多少牛奶。
最後,農夫約翰的預算為v
vv(1 <= v
vv<= 100000),即他最多可以花費的金錢。請幫助他確定應該買什麼遊戲平台和遊戲,使得他能夠獲得的產出值的和最大。
考慮下面的資料,有n
nn種遊戲平台,並且有v
vv=$800預算。第一種遊戲平台花費$300並且有兩個遊戲,**分別為$30和$25,它們的產出值如下所示:
遊戲 # 花費 產出值
1 $30 50
2 $25 80
第二種平台**為$600,並且只有一種遊戲:
遊戲 # 花費 產出值
1 $50 130
第三種平台**為$400,並且有三種遊戲:
遊戲 # 花費 產出值
1 $40 70
2 $30 40
3 $35 60
農夫約翰應該買第1和第3種平台,並且買平台1的遊戲2,還有平台3的遊戲1和遊戲3。使得
最後他最後的產出值最大,為210:
產出值預算: $800
平台 1 -$300
遊戲 2 -$25 80
平台 3 -$400
遊戲 1 -$40 70
遊戲 3 -$35 60
—————————
總計: 0 (>= 0) 210
第1行:兩個由空格隔開的整數:n
nn和v
vv第2到第n+1
n+1n+
1行:第i+1
i+1i+
1行表示第i
ii種遊戲平台的**和可以在這種遊戲平台上面執行的遊戲。包含:p
ip_i
pi,g
ig_i
gi還有g
ig_i
gi對由空格隔開的整數gpj
gp_j
gpj
,p vj
pv_j
pvj
第1行:農夫約翰在預算內可以得到的最大的產出值。
3 800
300 2 30 50 25 80
600 1 50 130
400 3 40 70 30 40 35 60
依賴揹包。
先設f i,
j,kf_
fi,j,k
表示當前做到第i個遊戲平台的第j個遊戲,花費k的最大價值。
則有f i,
j,k=
pvi,
j+ma
xf_=pv_+max\left \^._^}f_-p_},max_^f_} \right \}
fi,j,k
=pv
i,j
+max
然後我們發現,max
maxma
x中的值可以分別用兩個陣列,即lk=
maxl
=1i−
1.o=
1gif
l,o,
k−gp
i,j−
pi
l_=max_^._^}f_-p_}
lk=ma
xl=1
i−1
.o=1
gi
fl,o
,k−g
pi,j
−pi
,r k=
maxo
=1j−
1fi,
o,k−
gpi,
jr_=max_^f_}
rk=ma
xo=1
j−1
fi,o
,k−g
pi,j
。所以,我們可以一邊推出f
ff,一邊更新r
rr。當乙個遊戲平台列舉完後,就將r
rr賦值給l
ll即可。
#include
#include
#include
using
namespace std;
int l[
100005
],r[
100005
],num[55]
,val[55]
,a[55][
15][2
],n,v,ans;
inline
intread()
while
((ch>=
'0')
&&(ch<=
'9')
)return an*ww;
}int
main()
for(
register
int i=
1;i<=v;i++
)l[i]=-
1;for(
register
int i=
1;i<=n;i++
)else
if(r[k-a[i]
[j][0]
]>=
0)r[k]
=max
(r[k]
,a[i]
[j][1]
+r[k-a[i]
[j][0]
]);}
}for
(register
int j=
0;j<=v;j++
)l[j]
=max
(l[j]
,r[j]);
}for
(register
int i=
0;i<=v;i++
)ans=
max(ans,l[i]);
printf
("%d"
,ans)
;fclose
(stdin);
fclose
(stdout);
return0;
}
151 USACO Dec07 建造路徑
輸入檔案 roads.in輸出檔案 roads.out簡單對比 時間限制 1 s 記憶體限制 128 mb 譯 by cmykrgb123 描述farmer john 剛剛得到了幾個新農場!他想把這幾個農場用路連線起來,這樣他就可以通過筆直的公路從乙個農場到另乙個農場了。現在已經有了幾條連線著的農場...
Usaco DEC08 bronze 劣質的草
題目描述 貝茜像其它奶牛一樣正在吃草,她正在思考她所在的地方。她注意 到她只得到了乙個平於海平面的廣泛大片牧場。只有海拔1公尺或者更 高更硬的草不那麼美味。草隨著海拔的增加越發難吃。繼續咀嚼,她意識到,這沒有食慾的食物長成兩側的丘陵,形成了青 翠美味豐富草地海洋中的一系列劣質草小島 貝茜穿上她的實驗...
字元0 數字0和 0
binoct dechex 縮寫 字元 解釋0000 000000 00nut null 空字元00110000 6048300 字元0ascii碼值 0 表示空字元,空字元就是平時所說的 0 字元 0 ascii碼值為 48,如 012 字串中的 0 表示字元 0 數字 0,所說的數字 0,就是平...