CmdOI2019 任務分配問題

2022-05-10 21:37:12 字數 1550 閱讀 3535

題目描述

在某台有kk個cpu的計算機中,有nn個計算任務等待執行。

a_iai​為第ii個任務的優先順序,方便起見,aa為乙個排列。

現在,要將這些任務分配給cpu去解決。

由於記憶體等原因,乙個cpu只能負責連續一段的任務,並且要按(從左到右的)順序執行。

在某個cpu內,無序度定義為 : 前者先執行,而後者優先順序高的任務對的個數。

請最小化每個cpu的無序度之和。

輸入格式

第一行兩個整數n,kn,k,分別表示任務個數和cpu個數。

第二行nn個整數,表示a_a1...n​

輸出格式

輸出乙個整數,表示最小的無序度之和。

輸入輸出樣例

輸入 #1複製

5 11 5 4 2 3

輸出 #1複製

5輸入 #2複製

5 21 5 4 2 3

輸出 #2複製

1輸入 #3複製

8 31 3 5 2 7 4 8 6

輸出 #3複製

4說明/提示

測試點編號 n k

1~2 25000 1

3 25000 2

4~5 1000 10

6~10 25000 25

(保證k\leq nk≤n , #6~10時限2s)

樣例解釋:

樣例1此時只能把所有任務交給單獨的乙個cpu。

第乙個任務和其他所有任務都形成無序任務對。

此外最後兩個任務也形成無序任務對,共5個。

樣例2第乙個cpu單獨處理任務1,無序度為0;

第二個cpu處理\無序度為1;

1 #include2 #include3 #include4 #include5

using

namespace

std;

6int c[50005],tr,tl,f[30][25005],a[25005

],s,n,k;

7void del(intx)8

14}15void add(int

x)1622}

23int query(int

x)24

31return

sum;32}

33int

get(int l,int

r)34

41while (tl>l)

4247

while (tr4853

while (tr>r)54

59return

s;60}61

void solve(int x,int l,int r,int l,int

r)62 74}

75 solve(x,l,mid-1

,l,mid);

76 solve(x,mid+1

,r,mid,r);77}

78int

main()

79

89for (i=2;i<=k;i++)

9093 printf("%d"

,f[k][n]);

94 }

1301 任務分配

2003年浙江省隊選拔賽 時間限制 1 s 空間限制 128000 kb 題目等級 大師 master 題解檢視執行結果 有n位工作人員,同時有n項任務,每人必須承擔一項任務,若給出某人不能從事的某些任務,問要安排好工作,共有多少種方案?輸入描述 input description 輸入檔案第1行為...

CODEVS 1301 任務分配

描述 有n位工作人員,同時有n項任務,每人必須承擔一項任務,若給出某人不能從事的某些任務,問要安排好工作,共有多少種方案?分析 容斥原理的應用.先看看樣例 四個人 a,b,c,d a 不能選擇 2 b 不能選擇 2 3 c 不能選擇 3 4 d 不能選擇 4 總數是1 4全排列的個數 4 24 再考...

t057 任務分配

time limit 1 second memory limit 128 mb 問題描述 現有n個任務,要交給a和b完成。每個任務給a或給b完成,所需的時間分別為ai和bi。問他們完成所有的任務至少要多少時間。輸入格式 第一行乙個正整數n,表示有n個任務。接下來有n行,每行兩個正整數ai,bi。輸出...