bzoj3209 花神的數論題(數字Dp)

2021-08-15 21:06:50 字數 921 閱讀 4760

題目傳送門

神。解法:

又是肉dalao推薦的神題。

想了半天發現就算我知道每個的sum我要求派還是會超時啊。

於是我根本沒有往同乙個sum可能有多個的地方想。

結果正解就是這樣的。。

數字dp的思想:

f[i][j]表示二進位制有i位,最高位為0,一共有j個1

g[i][j]表示二進位制有i位,最高位為1,一共有j個1。

那麼轉移就很容易啦。

然後由於有n的限制。

每到一位的時候我們預設前面的位都跟n的一樣。

那麼我們從最高位開始。如果當前位為1的話。

我們就有兩種選擇。填0或1。具體看**吧。

**實現:

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

ll g[110][110],f[110][110];

ll len;ll n;const ll mod=10000007;

ll pow_mod(ll a,ll b) return ans;

}int main()

f[1][0]=1;g[1][1]=1;

for(int i=2;i<=len;i++)

for(int j=0;j<=i;j++)

ll ans=1;ll c=0; //c表示前面的位有多少個1

for(ll t=len;t>=1;t--)

}printf("%lld\n",(ans*c)%mod);

return

0;}

bzoj3209 花神的數論題

題意 求sum 1 sum 2 sum n 其中sum x 表示x的二進位制表達中1的數量。答案模10 7 7。n 10 15。考慮列舉sum x 的值為t,然後求有多少個不大於n的正整數的二進位制表達恰好有t個1,設這個答案為f t 這一部分可以用數字dp來實現。例如要求解1.12,可以將其分成1...

bzoj 3209 花神的數論題

設 sum i 表示 i 的二進位制表示中 1 的個數。給出乙個正整數 n 求 i 1ns um i 枚下1的個數,那麼題目就轉換成了1 n有多少個數的二進位制有x個一。這就很容易數字dp了。f i j 表示i位第一位為1,共j個一的數的數目,g i j 表示i位第一位為0,共j個一的數的數目。容易...

BZOJ3209 花神的數論題

bzoj3209 花神的數論題 背景眾所周知,花神多年來憑藉無邊的神力狂虐各大 oj oi cf tc 當然也包括 ch 啦。描述話說花神這天又來講課了。課後照例有超級難的神題啦 我等蒟蒻又遭殃了。花神的題目是這樣的 設 sum i 表示 i 的二進位制表示中 1 的個數。給出乙個正整數 n 花神要...