網路流24題 魔術球問題

2022-05-19 10:00:23 字數 601 閱讀 2123

題目:洛谷p2765。

題目大意:給你n根柱子,現在讓你從1開始,每次把乙個數放到柱子上。

規定放上來的數要麼在最下面,要麼與下面乙個數的和為完全平方數。

求最多能放多少個數,並輸出方案。

解題思路:這道題可以貪心。

每次有乙個數,它能放**就直接給它放著,不去考慮。

據說可以證明,但我不會。

標準做法是網路流。

做法大致是拆點,然後連邊跑即可。

我用貪心玄幻地過了。

c++ code:

#include#includeint n,a[57][20000],cnt[55]=;

inline int power(int a)

inline int judge(int a,int b)

int main()

if(!b)break;

} printf("%d\n",i-1);

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

return 0;

}

網路流24題 魔術球問題

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

魔術球問題(網路流24題)

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

網路流24題 魔術球問題

以珠子為點,滿足條件就兩兩連邊 那麼就是讓你求n條路徑最多能覆蓋多少節點。眾所周知,最小邊覆蓋 點總數 最大匹配 不會看這裡link 於是拆點跑二分圖即可 大概就是s向x連邊 滿足條件的點k向x 連邊 x 向t連邊 有兩種方式 1.我們輪流加點,每次在殘量網路跑最大流就可以了 2.我們二分答案,每次...