題目描述
在某台有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 #include5using
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。輸出...