CCF 2023年3月第5題 引水入城(80分)

2021-08-16 14:54:54 字數 1429 閱讀 9433

這一題是很明確的最大流問題;但是無論是用dfs 還是 bfs 都肯定會超時。 因為規模太大了。

如果想練手網路流可以試試提交乙個殘量網路的**,應該只能得50分左右。

dfs,bfs 有缺陷得地方在於沒有認識到這一題圖得結構是非常規整得。這一題得方案還是使用動態規劃來做。

將最大流問題轉換為最小割問題;接下來只是嘗試怎麼將圖分為兩部分了。

如圖得紅線就構成了乙個分割。

我們得目的只是找出最小得分割即可。

而找最小得分割當然可以從右往左或者從左往右迭代了~

上**:

// 20170305-markdown-動態規劃.cpp: 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include#include#includeusing namespace std;

int main()

cols[i] = node;

} for (int i = 0; i < n - 2; ++i)

rows[i] = node;

} long long *pre = new long long[n];

long long *pre_min = new long long[n];

long long *pre_min2 = new long long[n];

long long *the = new long long[n];

long long min;

long long sum;

for (int i = 0; i < n-1; ++i)

for (int i = m; i > 1; --i)

sum = 0;

for (int k = j+1; k < n - 1; ++k)

the[j] = min+ cols[j][i - 2];

} pre_min[0] = the[0];

pre_min2[n - 2] = the[n - 2];

for (int j = 1; j < n - 1; ++j)

for (int j = n-3; j >=0; --j)

memcpy(pre, the, sizeof(long long)*n);

} long long maxflow = the[0];

for (int i = 0; i < n - 1; ++i)

end = clock();

cout << double(end - start) / clocks_per_sec<

cout << maxflow;

system("pause");

return 0;

}

CCF 2023年12月第5題 商路

這一題題目很長,但理解起來並不困難。有一點很重要,那就是題目輸入的順序是城市編號的順序,而城市編號的順序又直接決定了城市之間的上下級關係。雖然編號小的不一定是大編號的下級,但下級城市的編號一定比上級城市的編號小,如何利用這一點非常重要。假如城市a的下級城市是b,c,d 那如果b,c,d 本身的商路價...

CCF2023年12月第3題 Crontab

這一題要求我們對給定的配置資訊,在特定的時間段輸出需要執行的任務。在unix中每分鐘檢查一次,最簡單的思路就是用迴圈模擬時間的推移,每分鐘匹配一次規則。這種情況在真正的系統裡是很高效的,因為時間是真實流動的。但如果是模擬執行則有些浪費時間。如果在考試過程中想不到其它方法這種暴力方法至少可以通過70 ...

CCF認證2023年12月第3題 最大的矩形

試題編號 201312 3 試題名稱 最大的矩形 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 在橫軸上放了n個相鄰的矩形,每個矩形的寬度是1,而第i 1 i n 個矩形的高度是hi。這n個矩形構成了乙個直方圖。例如,下圖中六個矩形的高度就分別是3,1,6,5,2,3。請找出能...