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年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...