前言
因為看著劉汝佳的演算法書學習的演算法,今天聊聊最小生成元,關於這一點我覺得書上的方法有些不妥,因為就拿出來說說,這個演算法相對還是比較簡單的。
最小生成元問題描述
如果x加上x的各個位數字之和得到y,就說x是y的生成元;給出n,(1<=n<=100000),求最小生成元。無解輸出0。例如,n=216,121,2005時的解分別為198 , 0, 1979。
演算法思路
1、如果考慮到多次求解的話,那麼就先把所有的數的最小生成元求解出來存放在陣列中,後面求解的時候直接通過陣列中獲取。
2、如果只是求解幾次的話,那麼就不用採用以上方法,例如我們求解216的最小生成元,根據描述我們可以知道,最小生成元一定是大於216-9*3=189的。因為最小生成元+每個數字的和得到y,那麼當每個數字和最大的時候,最小生成元就是最小的。
**實現1
#include
#include
#define max 100050
int main()
if(!a[sum+i])
}scanf("%d", &num);
while(num--)
return
0;}
**實現2
#include
#include
int main()
for(int i=num-count*9; iint
sum=0;
temp = i;
while(temp>0)
if(sum+i == num)
}if(!flag)
}
最小生成元 java
如果x加上x的各個位數字之和得到y,就說x是y的生成元 給出n,1 n 100000 求最小生成元。無解輸出0.例如,n 216,121,2005時的解分別為198,0,1979。198 1 9 8 216 1979 1 9 7 9 2005 我的思路如下 1.從0找到n所有的數字 2.將這些數字轉...
求解最小生成樹
1.prim演算法求解,其思路與dijkstra差不多,不斷貪心往已選定的集合眾新增點,最終得到一棵最小生成樹。具體為什麼最 不清 1 int map 105 105 2 int mincost 105 3 int vis 105 4 void prim 518 if v 1 break 19 vi...
prim演算法求解最小生成樹
首先滿足樹的條件,各邊權值加起來是最小的,同乙個圖的最小生成樹可能是不同的但是權值之和是一樣的 prim 假設有乙個圖,裡面的頂點可以分為,已近加入樹的和未加入樹的 從第乙個頂點開始,尋找權值最小的邊,然後把這個邊相連的頂點加入,已經在樹的集合內 在這兩個集合相連的節點上尋找權值最小的邊加入和 上 ...