線性規劃與網路流24題 04魔術球問題

2022-08-03 19:00:21 字數 2083 閱讀 3316

1739:魔術球問題

time limit:1000ms  memory limit:65536k

total submit:

39accepted:

20 page

view:230

special judged

[submit]   [status]  

[discuss]

font size: aa

aa aa

假設有n根柱子,現要按下述規則在這n根柱子中依次放入編號為1,2,3,...的球。

(1)每次只能在某根柱子的最上面放球。

(2)在同一根柱子中,任何2個相鄰球的編號之和為完全平方數。

試設計乙個演算法,計算出在n根柱子上最多能放多少個球。例如,在4 根柱子上最多可

放11 個球。

程式設計任務:

對於給定的n,計算在n根柱子上最多能放多少個球。

由檔案input.txt提供輸入資料。檔案第1 行有1個正整數n(n<=55),表示柱子數。

程式執行結束時,將n 根柱子上最多能放的球數以及相應的放置方案輸出到檔案

output.txt中。檔案的第一行是球數。接下來的n行,每行是一根柱子上的球的編號。

4

11

1 82 7 9

3 6 10

4 5 11

【問題分析】

列舉答案轉化為判定性問題,然後最小路徑覆蓋,可以轉化成二分圖最大匹配,從而用最大流解決。

【建模方法】

列舉答案a,在圖中建立節點1..a。如果對於i

具體方法可以順序列舉a的值,當最小路徑覆蓋數剛好大於n時終止,a-1就是最優解。

【建模分析】

由於是順序放球,每根柱子上的球滿足這樣的特徵,即下面的球編號小於上面球的編號。抽象成圖論,把每個球看作乙個頂點,就是編號較小的頂點向編號較大的頂點連線邊,條件是兩個球可以相鄰,即編號之和為完全平方數。每根柱子看做一條路徑,n根柱子要覆蓋掉所有點,乙個解就是乙個路徑覆蓋。

最小路徑覆蓋數隨球的數量遞增不遞減,滿足單調性,所以可以列舉答案(或二分答案),對於特定的答案求出最小路徑覆蓋數,乙個可行解就是最小路徑覆蓋數等於n的答案,求出最大的可行解就是最優解。本問題更適合列舉答案而不是二分答案,因為如果順序列舉答案,每次只需要在殘量網路上增加新的節點和邊,再增廣一次即可。如果二分答案,就需要每次重新建圖,大大增加了時間複雜度。

**:

#include #include #include #include #define maxn 100000

#define eps 0.000000001

#define inf 1 << 30

using namespace std;

struct e

edge[200000];

int tot, s, t, n, ans, k;

int head[maxn], d[maxn], dist[maxn], vis[maxn];

void add_edge(int u, int v, int f)

int dfs(int x, int low)

return b;

}

int bfs()

}return 0;

}

void dinic()

int check(int m, int n)

void print(int u, int clr)

}if (!flag) print(v/2, clr);

}

int main()

n--;

printf("%d\n", n);

memset(vis, 0xff, sizeof(vis));

int clr = 0;

for (int j = 1; j <= n; j++) if (vis[j] == -1) print(j, clr++);

for (int k = 0; k < clr; k++)

printf("\n");

}return 0;

}

線性規劃與網路流24題 4 魔術球

線性規劃與網路流24題 4 魔術球 description 假設有n根柱子,現要按下述規則在這n根柱子中依次放入編號為 1,2,3,的球。1 每次只能在某根柱子的最上面放球。2 在同一根柱子中,任何2個相鄰球的編號之和為完全平方數。試設計乙個演算法,計算出在n根柱子上最多能放多少個球。例如,在4 根...

線性規劃與網路流24 魔術球問題

題目點這裡 最小路徑覆蓋問題 這道題,一開始我花了100多ms,看了下排行榜,發現個10多ms的。看了很久他的 才明白怎麼回事。同時更加加深了我對匈牙利演算法的理解。我從他的 中學到的是 1 若多加幾條邊,並不需要重新跑一邊匈牙利,只需要從沒匹配的點開始dfs就可以了,2 若因為多加了乙個點,從而多...

線性規劃與網路流24題 17 運輸問題

description w公司有m個倉庫和n 個零售商店。第i 個倉庫有ai個單位的貨物 第j個零售商店需要bj個單位的貨物。貨物供需平衡,即sigma ai sigma bj 從第i個倉庫運送每單位貨物到第j個零售商店的費用為cij。試設計乙個將倉庫中所有貨物運送到零售商店的運輸方案,使總運輸費用...