★★☆ 輸入檔案: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)
#includeusingnamespace
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就是最優解。由於是順序放球,每根柱子上的球滿足這樣的特徵,即下面的球編號小於上面球的編號。抽象成圖論...