考試(1月5日)

2021-09-08 00:04:01 字數 3188 閱讀 2277

題目

讀入乙個正整數n。要求將n寫成若干個正整數之和,並且使這些正整數的乘積最大。例如,n=13,則當n表示為4+3+3+3(或2+2+3+3+3)時,乘積=108為最大。輸入n

輸出思路

如何分解這個n,才能使乘積最大,這是此題的核心。

首先明白乙個定理:兩正數相差越小,其乘積就越大

證明過程如下

設正數n,y,x(n>y>x),比較n*(n-x)與n*(n-y)

我們用作差法,即用 n*(n-x)-n*(n-y)

⇒ n-x-n+y

⇒ y-x

∵ y>x

∴ n(n-x)>n(n-y) ( x < y )

看到這裡,有些人就覺得直接 n/2*(n-n/2) 就行了,既然你都分了n那你為什麼不再把n/2再分呢?

是的,這樣下去會分到n個1,乘積又變小了,所以我們就把n分成全部都是二,但n為奇數的時候會多出來乙個1,其實這時就可以把1與其中乙個2合併,成為3,畢竟我們知道 3 * x > 2 * x * 1 ( x > 0 )。

但仔細推敲就會發現乙個例外: 6

6 = 3+3 = 2+2+2,但是 3 * 3 > 2 * 2 * 2, 所以,當 n >= 6 時,(n-6) * 3 * 3 >= (n-6) * 2 * 2

同樣的,若(n-6)中還有6,說明還可以分。

我們再看,n<6的時候,按照前面乙個定理就可以了,但你還是會發現它們也遵循著先分3的原則,只不過在n%3==1的時候,拿出了乙個3與1組成了兩個2,因為我們知道 x * 3 * 1 < x * 2 * 2(x 為正整數)

所以總結一下吧

先分三,再分二,不分一;有一有三取成兩個二

所以,此題就變成了一道水題,qkp和高精就行了

**

#include 

#include

#include

#include

using namespace std;

#define m

5005

int sum, n, len, len_3, ss;

int he[m]

, yin[m]

, ans[m]

;void

rd(int &x)

while

(isdigit

(c))

}void

qkp(int y)

;for

(int i =

1; i <= len; i ++)}

len += len_3;

while

(!linshi[len]

&& len >

0) len --

;for

(int i =

1; i <= len; i ++

) he[i]

= linshi[i];}

y /=2;

int linshi[m*

4]=;

for(int i =

1; i <= len_3; i ++)}

len_3 *=2;

len_3++

;while

(!linshi[len_3]

&& len_3 >

0) len_3 --

;for

(int i =

1; i <= len_3; i ++

) yin[i]

= linshi[i];}

} int main()

else

if( n%3==

1)else

sum = n/3;

qkp(sum)

;for

(int i =

1; i <= len; i ++)if

( ans[len+1]

) len++

;printf

("%d\n"

, len)

;for

(int i = len; i >=

max(

1,len-99)

; i --

)printf

("%d"

, ans[i]);

return0;

}

題目

給出乙個長度為n的整數序列,求出包含它的第k個元素的最長上公升子串行。

輸入第一行n與k

第二行n個元素

輸出如題目的所說的子串行的長度(0 < k <= n < 200000)

思路此題肯定不一般呀,樸素一定爆啊,所以沒學過最長上公升子串行優化方法的同學先補下課咩——點這裡哦

我們分兩段,1-k 和 k-n

1-k這段我們只要找到ak最後代替後所在的位置就行了

而如何搞k-n這一段呢?

如果我們單純從k-n,萬一這一段中有比ak小的,那麼這樣順著來的lis就可能不會含有ak,就會wa。

所以我們倒著來,這樣就和1-k這一段的方法一樣,那麼就會發現乙個問題,這樣倒著來是要搞乙個下降啊,那麼如何把大的變小,小的反而變大呢,其實很簡單,把它變為它的相反數,這樣我們就可以從n-k的順序來求n-k這一段的下降子串行,即為k-n的上公升子串行,因為算了兩次ak,所以需要減1

**

#include 

#include

#include

#include

using namespace std;

#define m 200005

#define inf 0x3f3f3f3f

int n, k,

len, len1;

int a[m]

, dp[m]

, dp_[m];

void rd(

int&x)

while

( isdigit(c)

) x *= f;

}int main(

)for

(int i =

1; i <= k; i ++)

for(

int i = k; i <= n; i ++)

a[i]*=-

1;for(

int i = n; i >= k; i --)

printf(

"%d\n"

,len

+len1-1)

;return0;

}

1月24日考試 ftp密碼

錯因分析 對檔案的儲存不夠恰當,例如第一題和第三題的題目,我是真的很憤怒,第一題在我寫了乙個多小時,終於樣例成功.可是當我再一次開啟檔案時,裡面只有我最開始的 誰可以告訴我這是為什麼 我絕對儲存了,還試了樣例 還有第三題,也是莫名失蹤,那個躺拿35分的題,我也是0分,真是憤怒 對字串及其相應的應用掌...

3月13日考試

a.午餐費 題目描述 現要對某班學生進行n天培訓,該班所有學生都訂了n天的午餐,所以我們知道他們每天要花多少錢。現在該班班主任需要決定如何使用班費。由於錢有限,他們不可能每天都吃免費午餐。因此,每天班主任可以選擇自己支付或使用班費支付當天午餐費。當然,班主任比較小氣,希望盡可能多地花掉班費,但是他太...

2023年1月5日知識回顧

1 昨天研究了下七牛雲的上傳介面,比較易於呼叫,參考文件python sdk 2 研究了下vmaig blog的頭像上傳部分原始碼,但是部署到nginx有點兒問題,就是nginx處理靜態檔案,把所有靜態檔案都colllectstatic到了乙個指定的目錄,views的邏輯,關於儲存的路徑怎麼寫都沒對...