#26552: 結果用O(n^2)爆搜也會過


ck1090758@gl.ck.tp.edu.tw (peienwu)

學校 : 臺北市立建國高級中學
編號 : 128355
來源 : [27.247.166.72]
最後登入時間 :
2021-10-16 11:22:04
b565. 5.採蘑菇攻略問題 -- 102學年度桃竹苗區資訊學科能力競賽 | From: [36.230.100.7] | 發表日期 : 2021-08-13 14:06

如題,使用O(n^2)爆搜也會過

也有O(n)的算法,就是區間最大連續和

 
#41028: Re: 結果用O(n^2)爆搜也會過


jason.program.cpp@gmail.com (資訊先生)

學校 : 不指定學校
編號 : 238091
來源 : [111.250.64.212]
最後登入時間 :
2024-07-04 19:31:05
b565. 5.採蘑菇攻略問題 -- 102學年度桃竹苗區資訊學科能力競賽 | From: [125.227.14.7] | 發表日期 : 2024-06-26 23:14

如題,使用O(n^2)爆搜也會過

也有O(n)的算法,就是區間最大連續和

可以不用O(n^2),使用邏輯判斷可以推導出 左位置,必小於 右位置 => 只需要O( ((n+1)n)/2 )

(身為一位高中生,因該知道這種邏輯)

 
#41029: Re: 結果用O(n^2)爆搜也會過


jason.program.cpp@gmail.com (資訊先生)

學校 : 不指定學校
編號 : 238091
來源 : [111.250.64.212]
最後登入時間 :
2024-07-04 19:31:05
b565. 5.採蘑菇攻略問題 -- 102學年度桃竹苗區資訊學科能力競賽 | From: [61.230.57.124] | 發表日期 : 2024-06-26 23:25

如題,使用O(n^2)爆搜也會過

也有O(n)的算法,就是區間最大連續和

可以不用O(n^2),使用邏輯判斷可以推導出 左位置,必小於 右位置 => 只需要O( ((n+1)n)/2 )

(身為一位高中生,因該知道這種邏輯)

搜尋方法如下,A1  A2  A3 .......An
1."左值"設在位置1 ,遍歷後方所有的值,當作"右值"。

2."左值"設在位置2 ,遍歷後方所有的值,當作"右值"。

3.以此類推直到"左值"設在位置n,停止搜尋。

 

ps:"左值": 為要撿起的連續 蘑菇中 最初撿起的那一個

     "右值": 為要撿起的連續 蘑菇 中 最後撿起的那一個

 
#41030: Re: 結果用O(n^2)爆搜也會過


jason.program.cpp@gmail.com (資訊先生)

學校 : 不指定學校
編號 : 238091
來源 : [111.250.64.212]
最後登入時間 :
2024-07-04 19:31:05
b565. 5.採蘑菇攻略問題 -- 102學年度桃竹苗區資訊學科能力競賽 | From: [61.230.57.124] | 發表日期 : 2024-06-26 23:30

如題,使用O(n^2)爆搜也會過

也有O(n)的算法,就是區間最大連續和

可以不用O(n^2),使用邏輯判斷可以推導出 左位置,必小於 右位置 => 只需要O( ((n+1)n)/2 )

(身為一位高中生,因該知道這種邏輯)

搜尋方法如下,A1  A2  A3 .......An
1."左值"設在位置1 ,遍歷後方所有的值,當作"右值"。

2."左值"設在位置2 ,遍歷後方所有的值,當作"右值"。

3.以此類推直到"左值"設在位置n,停止搜尋。

 

ps:"左值": 為要撿起的連續 蘑菇中 最初撿起的那一個

     "右值": 為要撿起的連續 蘑菇 中 最後撿起的那一個

所以,時間複雜度為: O((n-0)+(n-1)+(n-2)+(n-3)+......+(2)+(1)),可得:O((n+1)n/2)

 
#41044: Re: 結果用O(n^2)爆搜也會過


liaoweichen1024@gmail.com (M_SQRT)

學校 : 新北市立新莊高級中學
編號 : 195452
來源 : [122.116.111.175]
最後登入時間 :
2024-11-10 18:46:03
b565. 5.採蘑菇攻略問題 -- 102學年度桃竹苗區資訊學科能力競賽 | From: [122.116.111.175] | 發表日期 : 2024-06-28 11:25

如題,使用O(n^2)爆搜也會過

也有O(n)的算法,就是區間最大連續和

可以不用O(n^2),使用邏輯判斷可以推導出 左位置,必小於 右位置 => 只需要O( ((n+1)n)/2 )

(身為一位高中生,因該知道這種邏輯)

搜尋方法如下,A1  A2  A3 .......An
1."左值"設在位置1 ,遍歷後方所有的值,當作"右值"。

2."左值"設在位置2 ,遍歷後方所有的值,當作"右值"。

3.以此類推直到"左值"設在位置n,停止搜尋。

 

ps:"左值": 為要撿起的連續 蘑菇中 最初撿起的那一個

     "右值": 為要撿起的連續 蘑菇 中 最後撿起的那一個

所以,時間複雜度為: O((n-0)+(n-1)+(n-2)+(n-3)+......+(2)+(1)),可得:O((n+1)n/2)


這就是 $O(N^2)$ 喔!

網路上找的教程

 
#41053: Re: 結果用O(n^2)爆搜也會過


cpp123 (test.cpp)

學校 : 國立雲林科技大學
編號 : 199101
來源 : [140.125.84.86]
最後登入時間 :
2024-10-28 16:25:38
b565. 5.採蘑菇攻略問題 -- 102學年度桃竹苗區資訊學科能力競賽 | From: [140.125.84.86] | 發表日期 : 2024-06-28 17:05

如題,使用O(n^2)爆搜也會過

也有O(n)的算法,就是區間最大連續和

可以不用O(n^2),使用邏輯判斷可以推導出 左位置,必小於 右位置 => 只需要O( ((n+1)n)/2 )

(身為一位高中生,因該知道這種邏輯)

因該❌  應該✔️

ㄧㄣ❌  ㄧㄥ✔️



 
ZeroJudge Forum