1625 Usaco2007 Dec 寶石手鐲

2021-07-30 14:31:28 字數 1422 閱讀 2798

time limit: 5 sec  

memory limit: 64 mb

submit: 1268  

solved: 887 [

submit][

status][

discuss]

貝茜在珠寶店閒逛時,買到了乙個中意的手鐲。很自然地,她想從她收集的 n(1 <= n <= 3,402)塊寶石中選出最好的那些鑲在手鐲上。對於第i塊寶石,它的重量為w_i(1 <= w_i <= 400),並且貝茜知道它在鑲上手鐲後能為自己增加的魅力值d_i(1 <= d_i <= 100)。由於貝茜只能忍受重量不超過m(1 <= m <= 12,880)的手鐲,她可能無法把所有喜歡的寶石都鑲上。 於是貝茜找到了你,告訴了你她所有寶石的屬性以及她能忍受的重量,希望你能幫她計算一下,按照最合理的方案鑲嵌寶石的話,她的魅力值最多能增加多少。

* 第1行: 2個用空格隔開的整數:n 和 m

* 第2..n+1行: 第i+1行為2個用空格隔開的整數:w_i、d_i,分別為第i塊寶石 的重量與能為貝茜增加的魅力值

* 第1行: 輸出1個整數,表示按照鑲嵌要求,貝茜最多能增加的魅力值

4 61 4

2 63 12

2 7輸入說明:

貝茜收集了4塊寶石,她能忍受重量最大為6的手鐲。

23輸出說明:

貝茜把除了第二塊寶石的其餘所有寶石都鑲上手鐲,這樣她能增加

4+12+7=23的魅力值,並且所有寶石的重量為1+2+3 <= 6,同樣符合要求。

一看就是01揹包水題,但這題糾正了我一直以來的乙個誤區

原來一直以為第二層迴圈是順序逆序都沒問題,可是幾年才明白:逆序適用於所有情況,順序只適用於每種物品只有乙個的情況

本題由題意得,只能使用倒序

var

n,m,i,j:longint;

f:array[-1..13001]of int64;

v,w:array[-1..13001]of longint;

begin

assign(input,'2871.in');

assign(output,'2871.out');

reset(input);

rewrite(output);

readln(n,m);

for i:=1 to n do

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

for i:=1 to n do

for j:=m downto v[i] do//倒序

if f[j]f[j]:=f[j-v[i]]+w[i];

writeln(f[m]);

close(input);

close(output);

end.

總結:以後第二層迴圈只用倒序

1625 Usaco2007 Dec 寶石手鐲

貝茜在珠寶店閒逛時,買到了乙個中意的手鐲。很自然地,她想從她收集的 n 1 n 3,402 塊寶石中選出最好的那些鑲在手鐲上。對於第i塊寶石,它的重量為w i 1 w i 400 並且貝茜知道它在鑲上手鐲後能為自己增加的魅力值d i 1 d i 100 由於貝茜只能忍受重量不超過m 1 m 12,8...

UVa 1625 動態規劃

需要注意c i j 的遞推演算法和sp,sq,ep,eq的賦初值。由於dp i j 表示第乙個字串取i個,第二個字串取j個,所以不論dp i j 從dp i 1 j c i 1 j 來的還是從dp i j 1 c i j 1 來的,都可以在保證i 0的情況下用c i j c i 1 j 1 或0來算...

BZOJ 1625 寶石手鐲

time limit 5 sec memory limit 64 mb submit 1007 solved 684 submit status discuss 貝茜在珠寶店閒逛時,買到了乙個中意的手鐲。很自然地,她想從她收集的 n 1 n 3,402 塊寶石中選出最好的那些鑲在手鐲上。對於第i塊寶...