擴充套件二進位制數

2021-08-08 09:19:14 字數 777 閱讀 8696

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+num[i-1]-0>=0)

if(2

*k+num[i-1]-2

<=1&&2

*k+num[i-1]-0>=0)

}return dp[i][j][k];

}int main()

ans=dfs(m-1,0,num[m-1]-0)+dfs(m-1,1,num[m-1]-1);

cout

0;}

3.題目分析這道題目是一道數字dp的題目,首先建立乙個dp[64][3][2]這樣的陣列,dp[i][j][k]表示在i位填寫j餘下k需要填寫時的總的擴充套件二進位制數表示方法,遞迴到對底層時終止對的條件為i==0,k==0,這時返回1,如果k!=0,返回0,這樣dp操作即可完成所有的情況的記錄。

hihoCoder 擴充套件二進位制數

明天就要去實驗室幹活了。下次再打題不知是何時。這題不難,一開始想錯了。其實並不複雜,從低位到高位,逐個1處理。我用了個簡單dp。先將n轉化成二進位制。我們劃分出每個1 x個0的情況 x可為0 對於單個模組假設有s0 i 1 種情況,在前乙個模組退乙個1的情況下有s1 i 1 中情況。這是有規律的 假...

二進位制分組擴充套件

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

二進位制 二進位制起源

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