bzoj 3209 花神的數論題(數字dp)

2021-07-01 21:48:51 字數 2502 閱讀 5891

time limit: 10 sec  

memory limit: 128 mb

submit: 980  

solved: 460 [

submit][

status][

discuss]

背景眾所周知,花神多年來憑藉無邊的神力狂虐各大 oj、oi、cf、tc …… 當然也包括 ch 啦。

描述話說花神這天又來講課了。課後照例有超級難的神題啦…… 我等蒟蒻又遭殃了。

花神的題目是這樣的

設 sum(i) 表示 i 的二進位制表示中 1 的個數。給出乙個正整數 n ,花神要問你

派(sum(i)),也就是 sum(1)—sum(n) 的乘積。

乙個正整數 n。

乙個數,答案模 10000007 的值。

樣例輸入一

3樣例輸出一

2對於樣例一,1*1*2=2;

資料範圍與約定

對於 100% 的資料,n≤10^15

原創 memphis

思路:數字dp,對於二進位制i這一位如果是1,那麼後面有i-1位置可以填1或0,就可以知道新增加了多少個1,需要注意的是要記錄這個數前面已經出現了幾個1

#include#include#include#include#include#include#include#include#include#include#define l(x) (x<<1)

#define r(x) (x<<1|1)

#define mid(x,y) ((x+y)>>1)

#define eps 1e-8

typedef long long ll;

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

#define mem(t, v) memset ((t) , v, sizeof(t))

#define sf(n) scanf("%d", &n)

#define sff(a,b) scanf("%d %d", &a, &b)

#define sfff(a,b,c) scanf("%d %d %d", &a, &b, &c)

#define pf printf

#define bug pf("hi\n")

using namespace std;

#define mod 10000007

#define inf 0x3f3f3f3f

#define n 60

ll c[n][n]; //組合數

ll a[n];

ll n;

ll len;

void inint()

c[i][i]=1; }}

void solve()

int now=0;

int i,j;

for(i=len;i>=1;i--)

if(bit[i])

return ans;

}int main()

記憶化**:

//dp[i][j]代表第i位取j會得到的所有1的位數積

#include#include#include#include#include#include#include#include#include#include#define l(x) (x<<1)

#define r(x) (x<<1|1)

#define mid(x,y) ((x+y)>>1)

#define eps 1e-8

typedef long long ll;

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

#define mem(t, v) memset ((t) , v, sizeof(t))

#define sf(n) scanf("%d", &n)

#define sff(a,b) scanf("%d %d", &a, &b)

#define sfff(a,b,c) scanf("%d %d %d", &a, &b, &c)

#define pf printf

#define bug pf("hi\n")

using namespace std;

#define mod 10000007

#define inf 0x3f3f3f3f

#define n 60

ll dp[n][n];

int bit[n];

ll n;

ll dfs(int pos,int n, bool bound)

if(!bound)

dp[pos][n]=ans;

return ans;

}ll solve()

return dfs(len,0,true)%mod;

}int main()

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 花神要...