演算法設計與分析入門篇 分治作業 1

2021-07-02 03:09:11 字數 1632 閱讀 1329

題目內容:

給定 n 個數組成的陣列,求其逆序對的總數。 逆序對定義為,存在 (i, j) 滿足 i < j 且 a[i] > a[j] 的二元組的數目。

輸入格式:

第一行包含乙個整數,表示陣列的項數。 接下來的一行,包含 $n$ 個數($$\leq 100000$$),依次表示 ai(ai ≤ 109)。

輸出格式:

輸出一行表示對應的答案。

輸入樣例:

51 3 2 5 4

輸出樣例:

2

時間限制:2000ms記憶體限制:128000kb

第一次用類似快排的方法原理就是用第乙個數將所有數分為比他小和大於等於他兩部分,存在兩個佇列裡遇到比他小的,就將逆序對數加上存大數佇列的元素個數加一(第乙個數本身)。然後將兩個佇列遞迴。

**如下:不過超時了。

int num = 0;

int *p = new int[100000];

int *p1 = new int[100000];

void nixushu(int *p,int *p1,int begin,int end,bool sx)

else

}if (begin + 1 != da)

nixushu(p1, p, begin, da, sx);

if (xiao + 1 != end)

nixushu(p,p1,xiao,end,!sx);

}

超時的原因,個人認為可能是使用佇列了,所以將**改進,用兩個陣列來代替佇列。

**如下:還是超時。

extern int num = 0;

void nixushu(queue &p)

else

}

nixushu(p1);

nixushu(p2);

}

後來了解到要用歸併排序,歸併排序的思路更為簡單。不過oj平台關了沒辦法測試,等再開提交後再貼**吧。

演算法設計與分析入門篇 貪心法3

課程排程 題目內容 有 n 個人,要完成 2 門課程。其中第 i 個人學習一門課程所需要的時間是 ti。每個人同一時刻只能修一門課程,每門課程同一時刻只能被乙個人修,中間不能中斷。問所有人都修完 2 門課程,至少需要多少時間。輸入格式 輸入的第一行包含乙個整數 n 1 n 1000000 接下來的一...

演算法設計與分析入門篇 動態規劃 2

2括號子串行 a 10分 題目內容 一段括號序列被稱為平衡的,如果對於任意字首,左括號的數目都不小於右括號。給定一段括號序列,問有多少括號子串行是平衡的。內容相同但位置不同的算兩種。輸入格式 多組測試資料,每組測試資料報含一行乙個括號序列,括號序列的長度 100。輸出格式 輸出一行表示答案模 10 ...

演算法設計與分析作業(1)

1.dijkstra求單源最短路徑 先進行存圖操作,將帶權有向圖用鄰接矩陣來表示 for int i 0 i u v dist map u v dist 用dis陣列來儲存0點到其他每乙個點的最短距離,初始時dis i map 0 i 接下來進行鬆弛操作,找出最短距離 首先0點為q集合中的點,0 1...