5.座位調整
調整的方法如下:
1.首先將辦公區按照各種零食的擺放分成n個不同的區域(例如:可樂區,餅乾區,牛奶區等等);
2.每個員工對不同的零食區域有不同的喜好程度(喜好程度是1~100的整數, 喜好程度越大表示該員工越希望被調整到相應的零食區域);
3.由於每個零食區域可以容納的員工數量有限,人力資源部希望找到乙個最優的調整方案使得總的喜好程度最大。
輸入要求:
檔案第一行包含兩個整數n,m(n>=1,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 31 1 1
100 50 25
100 50 25
100 50 25
樣例:in.txt
輸出要求:
對於每個測試資料,輸出可以達到的最大的喜好程度。例:
175樣例:out.txt
資料解釋:
此資料只存在一種安排方法,三個員工分別安置在三個區域。最終的喜好程度為100+50+25=175
評分規則:
1.程式將執行在一台linux機器上(記憶體使用不作嚴格限制),在每一測試用例上執行不能超過10秒,否則該用例不得分;
2.要求程式能按照輸入樣例的格式讀取資料檔案,按照輸出樣例的格式將執行結果輸出到標準輸出上。如果不能正確讀入資料和輸出資料,該題將不得分;
3.該題目共有4個測試用例,每個測試用例為乙個輸入檔案。各測試用例占該題目分數的比例分別為25%,25%,25%,25%;
4.該題目20分。
解答:#include
#include
#include
#include
#define menu_name_len 42
#define q5_true 1
#define q5_false 0
#define q5_unused_item 600
long g_arrreference[300]; /* [lm] */
long g_arrpeople[300][300]; /* [lm][ln] */
long g_arrpermitted[300]; /* [ln] */
long g_arrarealist[300][300]; /* [ln][lm] */
long g_arrsolution[300][300]; /* [ln][lm] */
long g_arrduplist[300][301]; /* [lm][1 + ldupcnt] */
long g_lcntsort;
char * readint(char * sz, long * out)
lpos = i;
for (; sz[i] && ' ' != sz[i]; i++)
strncpy(szbuf, sz + lpos, i - lpos);
szbuf[i - lpos] = '/0';
*out = atol(szbuf);
return sz + i;
}long compare( const void *arg1, const void *arg2)
long gettotal(long ln, long lm)
}return ltotal;
}long getswapresult(long ln, long lm, long lkey)
}arrkeytoswap[g_arrduplist[lkey][i + 1]][0] = j;
do while (lcost < 0);
arrkeytoswap[g_arrduplist[lkey][i + 1]][1] = lpermitted - 1;
if (lcost > lmaxcost)
}if (!lmaxcost)}}
if (!bdecided)
while ((lcost < 0
|| g_arrduplist[g_arrarealist[ g_arrduplist[lkey][i + 1] ][ lpermitted ] ][0])
&& lpermitted < lm);
if (lpermitted != lm)
else}}
for (i = 0; i < g_arrduplist[lkey][0]; i++)
}loldcnt = g_arrduplist[lkey][0];
g_arrduplist[lkey][0] = 1;
for (i = 0; i < lm; i++)}}
if (!ldupcnt)
g_arrduplist[lkey][0] = loldcnt;
for (i = 0; i < g_arrduplist[lkey][0]; i++)
}return lmaxtotal;
}/*
ln is area count
lm is people count
*/long getbestsolution(long ln, long lm)
return ltotal;
}for (i = 0; i < ln; i++)
}for (i = 0; i < lm; i++)}}
if (!ldupcnt)
return lmaxtotal;
}long main(long argc, char* argv)
for (i = 0; i < lm; i++)
}for (g_lcntsort = 0; g_lcntsort < ln; g_lcntsort++)
fclose(fp);
/* algorithm */
lret = getbestsolution(ln, lm);
printf("%ld", lret);
return 0;
}
Delphi程式設計介面的動態調整
如何設計美觀的程式一直是程式設計師的一大難題,很多程式設計師可以寫出很好的程式,但往往困於拙劣的外觀。其中如何使美觀的程式能在不同的環境下一樣美觀也同樣困擾著我們,我在一些程式的製作中掌握了一些使程式在不同環境同樣美觀的方法,希望給大家一點啟示。不同環境一般有不同的色彩數和不同的解析度等等,我只對這...
調整陣列順序 程式設計開發習題
題目 輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於位於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。思路 小白在這裡用了兩種方法。新定義了乙個陣列lastarray 然後把array從頭到尾遍歷了一下,將遍歷到的奇數,從頭...
考試座位號
輸入格式 輸入第一行給出乙個正整數n 1000 隨後n行,每行給出乙個考生的資訊 准考證號 試機座位號 考試座位號 其中准考證號由14位數字組成,座位從1到n編號。輸入保證每個人的准考證號都不同,並且任何時候都不會把兩個人分配到同乙個座位上。考生資訊之後,給出乙個正整數m n 隨後一行中給出m個待查...