WinterEx 最大乘積

2021-07-26 02:29:52 字數 1288 閱讀 5460

時間限制: 1 sec  記憶體限制: 128 mb

乙個正整數一般可以分為幾個互不相同的自然數的和,如3=1+2,4=1+3,5=1+4=2+3,6=1+5=2+4,…。

現在你的任務是將指定的正整數n分解成若干個互不相同的自然數的和,且使這些自然數的乘積最大。

只乙個正整數n,(3≤n≤10000)。

第一行是分解方案,相鄰的數之間用乙個空格分開,並且按由小到大的順序。

第二行是最大的乘積。

102 3 5

30

【思路】

1.若n=3 or n=4,好辦,特判;

2.對於比5大(含)的n,

本著最終分解的數字的乘積最大而又不重複

的原則,顯然可以

將n分成

2,3,4,

...n-sum_of_front.

現在要考慮的是,

要在分解到多少的時候停下來。很明顯,按照順序,最後的分解不下去的結束條件是剩餘的可分解的數目不大於已經分出來的組數。若分解到最後恰好完畢,則結束,反之,還要把剩餘的n

』們填補上去。本著不重複且積最大的原則,從後往前進行。注意n與邊界的大小。最後,注意乘積比較大,

ans高精度處理一下。

【**】

#include

#include

#include

#include

#include

#include

using namespace std;

const int mx=10000;

int n,i,j,l,t,d[mx+10],ans[mx+10];

int main()

else if (n==4)

l=1;

while (n>l)

l--;

t=l;

while (n)

for (i=1;i

printf("%d\n",d[l]);

memset(ans,0,sizeof(ans));//gjd!

t=0;

ans[t]=1;

for (i=1;i<=l;++i)

t+=5;

for (j=0;j

ans[j+1]+=ans[j]/10;

ans[j]=ans[j]%10; }

while (!ans[t]) t--; }

for (i=t;i>=0;--i) printf("%d",ans[i]);

printf("\n"); }

return 0; }

DFS BFS 最大乘積

今年是國際數學聯盟確定的 2000 世界數學年 又恰逢我國著名數學家華羅庚先生誕辰90周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的乙個好朋友xz也有幸得以參加。活動中,主持人給所有參加活動的選手出了這樣一道題目 設有乙個長度n的數字串,要求選手使用k個乘號將它分成k...

YTU OJ 最大乘積

時間限制 1 sec 記憶體限制 128 mb 提交 292 解決 39 提交 狀態 討論版 命題人 acm4302 對於n個數,從中取出m個數,如何取使得這m個數的乘積最大呢?第一行乙個數 代表資料組數 每組資料共兩行 第一行兩個正整數n m,n,m 20 第二行給出n個整數,其中每個數的絕對值小...

最大乘積問題

題目描述 輸入n個元素組成的序列s,找出乙個乘積最大的連續子串行,輸出最大乘積的值。如果這個最大乘積不是正數,輸出0。n小於18,每個元素值的絕對值不大於10。輸入先輸入n的值,再依次輸入n個數的序列,遇到檔案末尾結束。輸出在一行輸出最大乘積的值。樣例輸入 52 5 1 2 1 樣例輸出 20當看到...