codeforces 1043 F

題目鏈接

 

題意:給出n個數,問你從中選出至少多少個數才能使它們的gcd爲1,如果無解輸出-1。

 

題解:看上去一副不可做的樣子。。

我們設f[i][j]表示選了i個數,是否能使它們的gcd爲1。

轉移有點麻煩,不能用0/1來表示,應該用方案數來表示(因爲有倍數的問題)。

但這樣的時間複雜度看上去是n^2*sqrt(n)的。但仔細觀察,你會發現,如果一定有解,那麼你每次多選一個數的時候,必然會將它們的gcd至少除以2,然後300000的範圍的話你就只要最多做6/7次(不太清楚),也就是選這麼幾個數,就能使gcd變爲1辣。

時間複雜度O(7*n*sqrt(n))

 

代碼

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章