網路流24題 魔術球問題(簡化版

2022-05-03 10:24:20 字數 1556 閱讀 4340

★★☆   輸入檔案:balla.in輸出檔案:balla.out簡單對比

時間限制:1 s   記憶體限制:128 mb

問題描述: 

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

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

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

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

放11個球。 

´程式設計任務: 

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

´資料輸入: 

檔案第1 行有 1個正整數n,表示柱子數。 

´結果輸出: 

檔案的第一行是球數。

資料規模

n<=60  保證答案小於1600

輸入檔案示例

輸出檔案示例

方案如下

1 8 

2 7 9 

3 6 10 

4 5 11

每一行表示乙個柱子上的球

本題原版

最小路徑覆蓋=總點數-最大匹配

最大匹配可以用dinic 來求。其實最小路徑覆蓋數就相當於是柱子數

#include#include

#include

#include

using

namespace

std;

const

int n=3510

;const

int inf=1e9;

intread()

while(ch>='

0' && ch<='9')

return x*f;

}struct

edgee[n*50

];int hd[n],tot=1

;void add_edge(int u,int v,int

c)void insert(int u,int v,int

c)int

n,m,s,t;

intd[n];

bool

bfs()}}

return

d[t];

}int dfs(int u,int

lim)

}d[u]=0

;

returnf;}

intdinic()

intmain()

m+=dinic();

if(i-m>n)

}return0;

}

線性規劃做法

f(n)= (n*n-2)/2+n;//(n mod 2==0)

f(n)= (n*n-1)/2+n;//(n mod 2==1)

#includeusing

namespace

std;

intn,ans;

intmain()

網路流24題 魔術球問題(簡化版

問題描述 假設有n根柱子,現要按下述規則在這n根柱子中依次放入編號為 1,2,3,4.的球。1 每次只能在某根柱子的最上面放球。2 在同一根柱子中,任何2個相鄰球的編號之和為完全平方數。試設計乙個演算法,計算出在n根柱子上最多能放多少個球。例如,在4 根柱子上最多可 放11個球。程式設計任務 對於給...

cogs 魔術球問題 簡化版

網路流24題 魔術球問題 簡化版 輸入檔案 balla.in 輸出檔案 balla.out 簡單對比 時間限制 1 s 記憶體限制 128 mb 問題描述 假設有n根柱子,現要按下述規則在這n根柱子中依次放入編號為 1,2,3,4 的球。1 每次只能在某根柱子的最上面放球。2 在同一根柱子中,任何2...

網路流24題 魔術球問題

列舉答案轉化為判定性問題,然後最小路徑覆蓋,可以轉化成二分圖最大匹配,從而用最大流解決。列舉答案a,在圖中建立節點1.a。如果對於i具體方法可以順序列舉a的值,當最小路徑覆蓋數剛好大於n時終止,a 1就是最優解。由於是順序放球,每根柱子上的球滿足這樣的特徵,即下面的球編號小於上面球的編號。抽象成圖論...