51Nod 1383 整數分解為2的冪

2021-07-25 04:34:44 字數 862 閱讀 5548

任何正整數都能分解成2的冪,給定整數n,求n的此類劃分方法的數量!由於方案數量較大,輸出mod 1000000007的結果。

比如n = 7時,共有6種劃分方法。

7=1+1+1+1+1+1+1

=1+1+1+1+1+2

=1+1+1+2+2

=1+2+2+2

=1+1+1+4

=1+2+4

看到這題就是乙個遞推題,在數學課上不聽講找了一會規律之後馬上就推出了乙個式子:

當n%2==0時 f[

n]=f

[n−1

]+f[

⌊n2⌋

] 否則f[n]=f[n-1]

f[0]=1

n是奇數的時候式子很顯然,是偶數的時候有兩種情況:

含1的情況,那麼就是n-1的情況多了個1,所以有式子f[n-1]

否則沒有1的話,那麼全部都是2的倍數,那麼可以同時除以乙個2,那麼方案就是f[n/2]。

#include

#include

#include

#include

#include

#define fo(i,a,b) for(i=a;i<=b;i++)

using

namespace

std;

const

int maxn=1e6+7,mo=1000000007;

int i,j,k,l,t,n,m,ans;

long

long f[maxn];

int main()

else

}printf("%lld\n",f[n]);

}

51nod 1383 整數分解為2的冪

畫畫,找規律。dp n 表示n的劃分方法。當n為奇數的時候,dp n dp n 1 n 1每種分解後邊都加上乙個1就是了。當n為偶數的時候,dp n dp n 1 dp n 2 n 1的每種分解都加乙個1,這是一種情況,因為n是偶數,還有把1合併成2,把2合併成4的情況,這時候多出的這部分分解後的最...

51nod 1383 整數分解為2的冪

1383 整數分解為2的冪 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 任何正整數都能分解成2的冪,給定整數n,求n的此類劃分方法的數量!由於方案數量較大,輸出mod 1000000007的結果。比如n 7時,共有6種劃分方法。7 1 1 1 1 1 1 1 ...

51NOD 1383 整數分解為2的冪

任何正整數都能分解成2的冪,給定整數n,求n的此類劃分方法的數量!由於方案數量較大,輸出mod 1000000007的結果。比如n 7時,共有6種劃分方法。7 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 2 2 1 2 2 2 1 1 1 4 1 2 4 input 輸入乙個數n...