poj 2229 2的次方個數dp

2021-07-03 11:10:45 字數 968 閱讀 8447

題意:

給乙個數n,求用2的t次方的數來加成這個數,能有幾種方法。

結果對1e9取模。

e.g:

7可以有以下6種加法:

1) 1+1+1+1+1+1+1

2) 1+1+1+1+1+2

3) 1+1+1+2+2

4) 1+1+1+4

5) 1+2+2+2

6) 1+2+4

解析:當i為奇數的時候:

dp[i] = dp[i - 1]

就是直接+個1就到當前情況了;

當i為偶數的時候:

dp[i] = dp[i - 1] + dp[i>>1]

意思是當i為偶數的時候,拆成乙個奇數,還是拆成原來的偶數。

若拆成奇數+1到達當前,則=dp[i - 1],若拆成偶數相加到當前i,則相當於i/2的方案數。

**:

#include #include #include #include #include #include #include #include #include #include #include #include #define ll long long

#define lson lo, mi, rt << 1

#define rson mi + 1, hi, rt << 1 | 1

using namespace std;

const int maxn = 1e6 + 10;

const int inf = 0x3f3f3f3f;

const double eps = 1e-8;

const double pi = acos(-1.0);

const double ee = exp(1.0);

ll dp[maxn];

void init()

else

}}int main()

return 0;

}

poj 1953 dp 無連續1的01串個數

題意 問長度為n的無連續1出現的01串有多少個?思路 簡單dp。思路1 dp i 0 表示以0結尾長度為i的串的個數 dp i 1 表示以1結尾長度為i的串的個數。則轉移方程為dp i 0 dp i 1 0 dp i 1 1 和dp i 1 dp i 1 0 最終對於長度為n的串輸出dp n 0 d...

求某個數的整數次方

題目 實現函式double power double base,int exponent 求base的exponent次方。不需要考慮溢位。這裡直接求解的 應該不難寫,這裡先考慮比較簡單的情況,即base非0,exponent大於0。當然,有更好的解法,不然就不寫這blog了。更好的解法是基於下面的...

POJ 2676 整數的個數

時間限制 1000ms 記憶體限制 65536kb 描述給定k 1輸入 輸入有兩行 第一行包含乙個正整數k,第二行包含k個正整數,每兩個正整數用乙個空格分開。輸出輸出有三行,第一行為1出現的次數,第二行為5出現的次數,第三行為10出現的次數。樣例輸入 51 5 8 10 5樣例輸出 121 1 源 ...