NOIP2013模擬 KC的瓷器 題解

2021-07-11 21:43:57 字數 2259 閱讀 1035

kc來到了乙個盛產瓷器的國度。他來到了一位商人的店鋪。在這個店鋪中,kc看到了乙個有n(1<=n<=100)排的櫃子,每排都有一些瓷器,每排不超過100個。那些精美的藝術品使kc一下心動了,決定從n排的商品中買下m(1<=m<=10000)個瓷器。

這個商人看kc的臉上長滿了痘子,就像苔蘚一樣,跟精美的瓷器相比相差太多,認為這麼精緻的藝術品被這樣的人買走藝術價值會大打折扣。商人感到不爽,於是規定每次取商品只能取其中一排的最左邊或者最右邊那個,想為難kc。

現在kc又獲知每個瓷器的價值(用乙個不超過100的正整數表示),他希望取出的m個商品的總價值最大。

input

輸入檔案的第一行包括兩個正整數n,m;

接下來2到n+1行,第i行第乙個數表示第i排櫃子的商品數量si,接下來si個數表示從左到右每個商品的價值。

output

輸出檔案只有乙個正整數,即m個商品最大的總價值。

sample input

輸入1:

2 33 3 7 2

3 4 1 5

輸入2:

1 34 4 3 1 2

sample output

輸出1:

15樣例解釋1:

取第一排的最左邊兩個和第二排的最右邊那個。總價直為3+7+5=15;

輸出2:

9

data constraint

對於10%的資料,si=1,1<=i<=n。

對於另外10%的資料,n=1.

這是一道基礎的dp題。

先預處理take[i][j],表示從第

i排中取出

j個瓷器的最大價值,以及

a[i][j]

表示第i排前j

個瓷器的總價值。

考慮對於每一排取出最左邊的k

個,那麼剩下的

j-k個就是最右邊的

,1<=k<=c

。易得:

take[i][j]=max(a[i][k]+a[i][c]-a[i][c-j+k]),c

表示第i

排的瓷器數目。

接下來進行動態規劃,f[i][j]

表示從前

i排取出

j個的最大價值。

那麼f[i][j]=max(f[i-1][j-k]+take[i][k])。

時間複雜度o(nmc)

。大約是

10^8

,加上常數優化後在我的機器上可以在

0.3s

內出解

標準程式:

var g,a:array[0..100,0..10000] of longint;

ans:array[0..100,0..10000] of longint;

c:array[1..100] of longint;

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

function max(x,y:longint):longint;

begin

if x>y then exit(x) else exit(y);

end;

function min(x,y:longint):longint;

begin

if xreadln(n,m);

for i:=1 to n do

begin

read(c[i]);

for j:=1 to c[i] do

begin

read(a[i,j]);

//if j<>1 then

a[i,j]:=a[i,j]+a[i,j-1];

end;

end;

for i:=1 to n do

begin

for j:=1 to c[i] do

begin

for k:=0 to j do

begin

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

end;

end;

end;

for i:=1 to n do

begin

for j:=1 to m do

begin

for k:=0 to min(j,c[i]) do

begin

ans[i,j]:=max(ans[i,j],ans[i-1,j-k]+g[i,k]);

end;

end;

end;

writeln(ans[n,m]);

end.

模擬 NOIP 2013 花匠

花匠棟棟種了一排花,每株花都有自己的高度。花兒越長越大,也越來越擠。棟棟決定把這排中的一部分花移走,將剩下的留在原地,使得剩下的花能有空間長大,同時,棟棟希望剩下的花排列得比較別緻。具體而言,棟棟的花的高度可以看成一列整數h 1,h 2,h n。設當一部分花被移走後,剩下的花的高度依次為g 1,g ...

NOI(P)2013模擬 秘密任務

這題是在最短路上研究問題的,所以理所當然要建個圖先。其次我們先考慮費用,看看這圖,再yy一下,那麼我們可以發現這就是典型的最小割問題,可是我們還是要考慮如何判斷這個割是否唯一。首先,大家可以先去看我的另乙個blog,上面有寫類似這樣的判斷最大流是否唯一。其實這兩題是不同的。所以我在考試時就掛了。因為...

NOIP2013模擬 粉刷匠

給出n個球,其中有c1個球是顏色1的,有c2個球是顏色2的,有c3個球是顏色3的 有ck個球是顏色k的。求相鄰兩個球顏色不同的排列方案。k 15,ci 6,資料組數 2000 這種題一般很難有直接的通式,可以考慮dp。設fi,j表示,前i中顏色已經放完了,其中產生了j個不合法的空的方案數。這裡的空指...