Download presentation
Presentation is loading. Please wait.
1
1 10912: Simple Minded Hashing ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 10912: Simple Minded Hashing 解題者:陳俊達 解題日期: 2008 年 5 月 02 日 題意: 給兩個正整數,長度 L 跟整數 S ,要你計 算由 L 個數字相加等於 S 的情況有多少種。因為 題目是字串對應數字,所以每個數字的範圍為 1~26 ,組合方式必須為嚴格遞增。
2
2 題意範例: L=3 , S=10 abg = 1 + 2 + 7 = 10 acf = 1 + 3 + 6 = 10 ade = 1 + 4 + 5 = 10 bce = 2 + 3 + 5 = 10 agb = 1 + 7 +2 = 10 => 未遵守嚴格遞增 解法: DP 解法範例: 建一個陣列 list[n][m] , n 為長度, m 為總和,裡面放 的是方法數量,因為是嚴格遞增, n=2 的話,最小的 情況就是 1 + 2 = 3 ,所以 n=3 時,第三個數字必定 是 3 以上。 所以從上邊可以得到 list[n][m]+=list[n-1][m-k] 這 個關係式, k 為此次新增加的數字。 (k>n)
3
3 n=3,m=7 k=4 -> list[3][7]+=list[2][3] 1+2=3 k=5 -> list[3][7]+=list[2][2] 無此組合 k=6 -> list[3][7]+=list[2][1] 無此組合 n=4,m=12 k=4 -> list[4][12]+=list[3][8] 1+2+5=8, 1+3+4=8 k=5 -> list[4][12]+=list[3][7] 1+2+4=7 k=6 -> list[4][12]+=list[3][6] 1+2+3=6
4
4 討論: (1) 時間複雜度約為 O( n^2 * m ) 。 (2) 因為題目是設定為字串對應數字,所以數字的範圍即 1~26 ,所以當 L>26 時,便可直接輸出 0 。 此外,由於是嚴格遞增, L 最大為 26 時, S 為最大 =(1+26)*26/2 = 351 ,因此同上, S>351 時,輸出亦為 0 。
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.