題目傳送門
如果乙個數 x 的約數之和 y(不包括他本身)比他本身小,那麼 x 可以變成 y,y 也可以變成 x。
例如,4 可以變為 3,1 可以變為 7。
限定所有數字變換在不超過 n 的正整數範圍內進行,求不斷進行數字變換且不出現重複數字的最多變換步數。
輸入格式
輸入乙個正整數 n。
輸出格式
輸出不斷進行數字變換且不出現重複數字的最多變換步數。
資料範圍
1≤n≤50000輸入樣例:輸出樣例:樣例解釋
一種方案為:4→3→1→7。
題解:樹形dp:
首先預處理出每個數的約數之和,我們可以對每乙個合法的路徑進行建邊
最後就可以轉化為求樹的最長路徑問題
#include
#include
using namespace std;
const
int n =
50010
;int n;
int h[n]
, e[n]
, ne[n]
, idx;
int sum[n]
;bool vis[n]
;int ans;
void
add(
int a,
int b)
intdfs
(int u)
//求以u為根節點的最長路徑
else
if(d >= d2)d2 = d;
} ans =
max(ans, d1 + d2)
;return d1;
}int
main()
}for
(int i =
1; i <= n; i++)}
cout << ans << endl;
return0;
}
AcWing 1075 數字轉換
題目描述 如果乙個數 x 的約數之和 y 不包括他本身 比他本身小,那麼 x 可以變成 y,y 也可以變成 x。例如,4 可以變為 3,1可以變為 7。限定所有數字變換在不超過 n 的正整數範圍內進行,求不斷進行數字變換且不出現重複數字的最多變換步數。輸入格式 輸入乙個正整數 n。輸出格式 輸出不斷...
ACWing 1075 數字轉換
如果乙個數x xx的約數之和y yy 不包括他本身 比他本身小,那麼x xx可以變成y yy,y yy也可以變成x xx。例如,4 44可以變為3 33,1 11可以變為7 77。限定所有數字變換在不超過n nn的正整數範圍內進行,求不斷進行數字變換且不出現重複數字的最多變換步數。輸入格式 輸入乙個...
acwing 1075 數字轉換 (樹形DP)
首先,對於小於n的每個數,我們可以確定它的約數之和 不包括自己 是固定的,就像4的約數之和一定是3,不可能是其他的,那麼我們就可以將2 n的每個數的約數之和求出sum i 對於sum i i 的邊 因為對於每個i,sum i 是唯一確定的 也就是說每個兒子都有唯一乙個父節點,那麼我們最終就會構成森林...