ssl2238 2023年特長生試題 農場主

2021-08-17 12:16:51 字數 1622 閱讀 9760

2023年特長生試題 農場主

小張是乙個養馬農場的農場主,他要把n隻馬分配到k個馬房裡,放置的規則是:第1 到 第pi隻馬放入第乙個馬房,第pi+1 到第pk只放入第二個馬房,……以此類推。此外對於每乙個馬房都有乙個叫做「不高興係數」,即白色馬的數量*黑色馬的數量。你的任務是合理地分配這n隻馬,使得它所有馬房的「不高興係數」和最小。

從檔案farmer.in中讀入資料,檔案中第一行有 2 個整數: n ( 1 <= n <= 500 ) 和 k ( 1 <= k <= n)。接下來的n行有n個數。第 i 行為第 i 隻馬的顏色: 1 是黑色, 0 是白色。

將結果輸出到檔案farmer.out中,其結果為最小的「不高興係數」的總和。

6 3

1 1

0 1 0 1

elba

本題是動態規劃(dp),用f[i,j]表示用i個馬房裝j匹馬的最小不高興係數

首先要預處理第i匹馬時有多少只白馬,多少只黑馬,接著算出乙個馬房裝1~n匹馬的不高興係數為多少。

如果馬房=1,那麼恭喜你,已經可以當機輸出了(就是預處理的用1個馬房裝n匹馬的不高興係數啊)

接著dp,用少馬房裝少馬去更新多馬房裝多馬(好拗口)。具體實現就是用i列舉馬房;j列舉要馬;k列舉比j小的馬;少馬房就用i-1。故可以用f[i-1,k]來更新f[i,j],注意更新時裝多了馬後,要累加產生的不高興係數

動態轉移方程:f[i,j]:=f[i-1,k]+(b[j]-b[k])*(w[j]-w[k])

var

a,w,b:array[1..500]of longint;

f:array[1..500,1..500]of longint;

n,m,x,y,i,j,k,t:longint;

begin

read(n,m);

for i:=1

to n do

begin

read(a[i]);

if a[i]=1

then inc(x)//字首和

else inc(y);

b[i]:=x; w[i]:=y;

end;

for i:=1

to n do f[1,i]:=b[i]*w[i];//計算不高興係數

if m=1

then

begin

write(f[1,n]);

halt;

end;

for i:=2

to m do

//使用2~m的馬房(1已經算出來了)

for j:=i to n-m+i do

//裝i~n-m+i的馬(迴圈到後期越來越小的原因是:一開始要先切大的部分啊!)

begin

t:=maxlongint;

for k:=i-1

to j-1

do//k一定要比j小

begin

f[i,j]:=f[i-1,k]+(b[j]-b[k])*(w[j]-w[k]);

if f[i,j]then t:=f[i,j];

end;

f[i,j]:=t;//找最優值

end;

write(f[m,n]);

end.

ssl1326 08年東莞特長生 工作

2008年東莞特長生 之 工作 這次翻譯的主角是zy!轉眼2年過去了,zy被踢出機房,於是找了個遊戲。每天zy會知道乙個限時活動,清單上列出了n個可能需要他肝排名榜的活動。每個活動包含3個資訊 ti ai bi,ti表示肝此活動需要的時間,ai表示此活動的開啟時間,bi表示此活動的關閉時間。在某一時...

2023年東莞特長生 散步

description 李四是乙個很會利用時間的學生,他經常晚上吃過飯後一邊思考問題一邊散步,由於要思考問題,並且思考問題的內容越來越多,所以他在散步時也是越來越慢的,他自己總結出乙個規律,他散步時第一步走n厘公尺,第二步走n 1厘公尺,以後每步比前一步少1厘公尺,最後一步是0時就停下來了。現在給出...

08年東莞特長生 獎金

08年東莞特長生 獎金 time limit 1000ms memory limit 65536k total submit 326 accepted 108 description 由於無敵的凡凡在2005年世界英俊帥氣男總決選中勝出,yali company總經理mr.z心情好,決定給每位員工發...