我正在解決在codechef上添加分數:http://www.codechef.com/problems/ADDFRAC/ 問題。 如果有人可以幫助我理解問題的算法,這將是很大的幫助。codechef算法:添加分數
P.S:我試過這個問題,但是因爲我的算法是O(n^2),所以我得到超出時間限制。 我的代碼:http://www.codechef.com/viewsolution/2278117
我正在解決在codechef上添加分數:http://www.codechef.com/problems/ADDFRAC/ 問題。 如果有人可以幫助我理解問題的算法,這將是很大的幫助。codechef算法:添加分數
P.S:我試過這個問題,但是因爲我的算法是O(n^2),所以我得到超出時間限制。 我的代碼:http://www.codechef.com/viewsolution/2278117
你正在做兩個簡單的for循環。
而你應該做的是開始在相反的方式,並保持計算,直到總和大於當前的總和
如果你看到最多的回答可以看出,該指數是取自N-1到1
計算的推移,直到如果條件滿足 - 即是下一個分數除比當前總和
它存儲這在一個單獨的陣列高達(以指示直到此保持最大折射率true)
for(int index=n-1; index>0; index--) {
int j=index+1;
while(j<=n) {
next_num=numerator[j];
next_den=denominator[j];
if((1.0*numerator[index])/denominator[index]
<(1.0*(numerator[index]+next_num))
/(denominator[index]+next_den)) {
numerator[index]=numerator[index]+next_num;
denominator[index]=denominator[index]+next_den;
j=upto[j]+1;
//printf("%d/%d ", numerator[index], denominator[index]);
} else {
upto[index]=j-1;
break;
}
}
if(j>n) {
upto[index]=n;
}
}
是啊,你是對的,反正我已經實現了算法。並得到接受.Thnx。 – user122345656
如何解釋問題陳述中的「連續分數」?你認爲他們實際上意味着「連續」嗎? –
這意味着連續的分數總和使用他們的規則從索引「i」開始到小於<數組大小的任何索引 –
@VaughnCato:是的,它們意味着連續的。 – user122345656