作者privatewind (傷神客)
看板Grad-ProbAsk
標題Re: [理工] [資結]中央98-資工所
時間Fri Mar 19 22:43:46 2010
※ 引述《luckyburgess (心安即自在)》之銘言:
: 想問第5題的解答
: http://ezproxy.lib.ncu.edu.tw:8080/~arhui/cexamn/exam/EC02_98_01.pdf
: 麻煩幫我解答一下 !!感謝囉!
標準的DP題目
(1)
A[i]=x0+x1+...+xi, 即A[i]為x0到xi的總和
由此不難推知以下的遞迴式:
if i =0, A[i]= x[0];
if i!=0, A[i]= A[i-1]+ x[i];
用for loop即可在O(n)得出上述A陣列
A[0]=x[0];
for(i=1 ; i< n ;++i){ //n 為A陣列大小
A[i]=A[i-1]+x[i];
}
(2)
d[i,j]=x_{i}+x_{i+1}+x_{i+2}+...+x{j}
=x_{0}+x_{1}+...+x{j} - ( x_{0}+x_{1}+...+x_{i-1} )
=A[j]-A[i-1]
以上用for loop可在O(n^2)內解決
for(i=0 ; i<n; ++i){
for(int j=i; j<n ;++j){
if(i==0){
d[i][j]=A[j];
}
else{
d[i][j]=A[j]-A[i-1];
}
}
}
綜合(1)(2), 整體複雜度O(n^2), 為其所求。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 120.107.174.109
推 ie925155:為什麼(2)可在big-(n^2)解掉 03/19 23:44
→ privatewind:寫程式 用兩層迴層就可以KO 03/20 00:13
推 luckyburgess:謝囉^^ 03/20 00:31
※ 編輯: privatewind 來自: 120.107.174.109 (03/20 00:50)
→ privatewind:補上C code 03/20 00:50
推 assassin88:x_{0}+x_{1}+...+x{j} - ( x_{0}+x_{1}+...+x_{i-1} ) 03/20 09:17
→ assassin88:這個怎推的?? 03/20 09:17
推 FRAXIS:展開相減.. 就變成定義了 03/20 09:25