P1249 最大乘積 (數論 貪心)

2021-10-07 22:41:28 字數 758 閱讀 1958

題目鏈結

題面:

題解:從2開始連續幾個自然數的乘積最大。

假設我們 2+3+4+…+k>=n 剛好成立。

我們設ans=2+3+4+…k

如果ans=n,我們直接輸出乘積即可。

如果ans-n=1,那我們去掉2,令k+1

如果ans-n>1 假設 ans-n=p,那麼我們去掉p即可。

因為需要大數,就用python寫了。

def

main()

: n=

int(

input()

) ans=

0 now=

2 a=

while ans

ans=ans+now

now=now+

1if ans-n==1:

a[0]

=1a[-1

]=a[-1

]+1elif ans-n>1:

a[ans-n-2]

=1res=

1for i in a:

res=res*i

if i!=1:

print

(i,end=

" ")

print

("\n%d\n"

%(res)

)main(

)

P1249 最大乘積

problem p1249 最大乘積 contest luogu url memory limit 125 mb time limit 1000 ms user pannnn include using namespace std 把n分拆成若干個互不相等的自然數的和的分法只有有限種,因而一定存在一...

P1249 最大乘積 洛谷

題目 p1249 最大乘積 分析 一道高精 貪心 乙個數拆的越多乘積會越大,但不要拆出1,這樣浪費了 所以就2,3,4,5,但也不能連續的一直拆,因為可能不夠拆了 所以就可以跳出那個數 把那個數拆給前面的 大概就這樣 上 include using namespace std const int n...

最大乘積(陣列)

最大乘積 描述對於n個數,從中取出m個數,如何取使得這m個數的乘積最大呢?輸入第一行乙個數表示資料組數 每組輸入資料共2行 第1行給出總共的數字的個數n和要取的數的個數m,1 n m 15,第2行依次給出這n個數,其中每個數字的範圍滿足 a i 的絕對值小於等於4。輸出每組資料輸出1行,為最大的乘積...