2006 年百度之星程式設計大賽初賽題目 5

2021-06-07 09:37:19 字數 1365 閱讀 3696

座位調整

題目描述:

調整的方法如下:

1 . 首先將辦公區按照各種零食的擺放分成 n 個不同的區域。(例如:可樂區,餅乾區,牛奶區等等)。

2 . 每個員工對不同的零食區域有不同的喜好程度(喜好程度度的範圍為 1 — 100 的整數, 喜好程度越大表示該員工越希望被調整到相應的零食區域)。

3 . 由於每個零食區域可以容納的員工數量有限,人力資源部希望找到乙個最優的調整方案令到總的喜好程度最大。

資料輸入:

第一行包含兩個整數 n , m ,( 1<=n , m<=300 )。分別表示 n 個區域和 m 個員工。

第二行是 n 個整數構成的數列 a ,其中 a[i] 表示第 i 個區域可以容納的員工數, (1<=a[i]<=m , a[1]+a[2]+..+a[n]=m) 。

緊接著是乙個 m*n 的矩陣 p , p ( i , j )表示第 i 個員工對第 j 個區域的喜好度。

答案輸出:

對於每個測試資料,輸出可以達到的最大的喜好程度。

輸入樣例

3 3

1 1 1

100 50 25

100 50 25

100 50 25

輸出樣例

175

資料解釋:此資料只存在一種安排方法,三個員工分別安置在三個區域。最終的喜好程度為 100+50+25=175

看到上題後,第一反映是用動態規劃。但是沒有想到非常好的遞迴表示式。目前想到的動態規劃的時間複雜度是m!。感覺一定有更有的方案。想到後再給大家寫出來。

目前想到的方法是做員工的全排列,然後根據排列的元素,按順序放到區域中。然後找出最大的興趣值。

int matrix[3][3] = ;

int a = ;

int personmax[3];

int m = 3;

int n = 3;

void swap(int*a, int*b)

int generateinterestingvalue()

for(int i =0; i< m; ++i)

}cntmax += matrix[source[k]][cntarea];

++position;

}if(cntmax > maxinteresting)

cntmax = 0;

position = 0;

cntarea = 0;

swap(&source[j],&source[i]);

}} delete source;

return maxinteresting;

}

2023年百度之星程式設計大賽 初賽 1

b problem description 小度熊拿到了乙個無序的陣列,對於這個陣列,小度熊想知道是否能找到乙個k 的區間,裡面的 k 個數字排完序後是連續的。現在小度熊增加題目難度,他不想知道是否有這樣的 k 的區間,而是想知道有幾個這樣的 k 的區間。input 輸入包含一組測試資料。第一行包含...

2023年百度之星程式設計大賽初賽B

圓環 時間限制 1000ms 描述乙個圓環上有n個位置,這n個位置按順時針依次標號為1,2,n。初始時圓環的每個位置上都有乙個1至n之間的整數,且每個整數只出現一次。任何時刻,你可以將圓環上的數全部逆時針旋轉乙個位置,即第i個位置上的數變為原來第i 1個位置上的數,第n個位置上的數變為原來第1個位置...

2020 年百度之星 程式設計大賽 初賽二

problem description 科學家小沃沃在研究病毒傳播的規律,從而控制疫情。有 n 個人,編號分別為 1,2,n。我們用螢光粉代替病毒,編號為 1 的人,在第 0 時刻塗上了螢光粉,剩下的人在第 0 時刻沒有塗。對於第 i 個人,我們知道這個人在哪些時刻出現在了哪些地方。如果時刻 t,某...