hihoCoder 擴充套件二進位制數

2022-08-19 11:21:14 字數 1219 閱讀 4868

明天就要去實驗室幹活了。。。。下次再打題不知是何時。。。。

這題不難,一開始想錯了。。。。其實並不複雜,從低位到高位,逐個1處理。

我用了個簡單dp。

先將n轉化成二進位制。

我們劃分出每個1+x個0的情況(x可為0)。

對於單個模組假設有s0[i+1]種情況,在前乙個模組退乙個1的情況下有s1[i+1]中情況。(這是有規律的)

假設不進製的情況下情況數:dp[0][i]

進製的情況下情況數:dp[1][i]

這樣得到轉移方程:dp[0][i+1] = s0[i+1]*dp[0][i] + dp[1][i]

dp[1][i+1] = s1[i+1]*dp[0][i] + dp[1][i]

ac**:

1 #include 2

3using

namespace

std;

4const

int maxn = 50;5

6int

p[maxn];

7 typedef long

long

int64;

89 int64 dp[2

][maxn];

1011

int main(void

)else

2324 vectorv;

25int t = 1;26

for(int i = 0; i < cnt; ++i)else33}

34//

cout << "haha" << endl;

3536

int sz =v.size();

37int64 ans;

38 dp[0][0] = v[0], dp[1][0] = v[0]-1;39

for(int i = 1; i < sz; ++i)

43/*

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

44cout << dp[0][i] << " " << dp[1][i] << endl;

*/45 ans = dp[0][sz-1

];46

47 printf("

%lld\n

", ans);48}

4950

return0;

51 }

view code

擴充套件二進位制數

1.題目描述 傳送門2.code c 版本 include using namespace std int dp 64 3 2 int num 64 int n int dfs int i,int j,int k if dp i j k 0 else if 2 k num i 1 1 1 2 k n...

二進位制分組擴充套件

最近才發現的乙個套路,以前以為二進位制分組只能搞揹包,結果發現還有一些更為優秀的操作。我們對於乙個不支援動態操作的資料結構,拆分為 log 個,然後每次加入元素加入到乙個新的組中,如果最新的兩個資料結構元素個數相等,就合併兩個元素。然後暴力重構這個合併得到的資料結構。然後查詢的時候就查詢每乙個分組內...

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...