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

2022-08-01 17:36:08 字數 850 閱讀 8157

題目:傳送門

題解:要注意到有可能同乙個sum有多個的情況

定義乙個 f[i][j] 和 g[i][j] 表示:

二進位制位數字i,最高位為0,共有j個1  &&  二進位制位數字i,最高位為1,共有j個1

轉移很簡單就不說了。

這樣子就可以瞎列舉一下n的二進位制位,如果為1就快速冪計算一下答案(細節很多,具體看**)

奇醜無比的**:

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7 typedef long

long

ll;8

const ll mod=10000007

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

共i位,最高位為 0/1 ,共j個1

10ll n;

11ll p_m(ll a,ll b)

1219

return

ans;20}

21int

main()

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

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

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

2832 ll ans=1,sum=0;33

for(int k=len;k>=1;k--)

3441

}42 printf("

%lld\n

",(ans*sum)%mod);

43return0;

44 }

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