二進位制數,錯位相乘

2022-07-29 05:06:10 字數 2572 閱讀 2908

給出乙個二進位制數的位數為n位(n < 100),二進位制數的值是多少不確定,給定乙個數 y (y < 100) , 使得從左邊起,第一位 * 第二位 + 第二位 * 第三位 + 第三位 * 第四位 …… + 第 n - 1 位 * 第 n 位  = y 成立 ,求出滿足等式的二進位制數有多少個;

下面給出我的思考過程:

由於 n 和 y 都是不確定的,並且二進位制數的最後一位是 0 或 1 ,所以假設 dp[ i ][ j ][ 0 ] 代表 y = i , n = j , 即 二進位制的位數為 j , 給定的數為 i ,且第 n 位 為 0 ,滿足條件的二進位制數的個數;  dp[ i ][ j ][ 1 ] 代表 y = i , n = j ,即二進位制的位數為 j , 給定的數為 i ,且第 n 位 為 1 ,滿足條件的二進位制的個數 ;

首先將陣列dp賦初始值為: 0  , dp[100][100][2] = ;

假設二進位制數只有一位,則 :

dp[ 0 ][ 1 ][ 0 ] = 1 ;

dp[ 0 ][ 1 ][ 1 ] = 1 ;  

給定的值從1開始到100,每乙個給定的值都對應二進位制的位數從2到100 ;

給定值為 0 時,dp[ 0 ][ 2 ][ 0 ] = dp[ 0 ][ 1 ][ 0 ] + dp[ 0 ][ 1 ][ 1 ]

dp[ 0 ][ 2 ][ 1 ] = dp[ 0 ][ 1 ][ 0 ]

dp[ 0 ][ 3 ][ 0 ] = dp[ 0 ][ 2 ][ 0 ] + dp[ 0 ][ 2 ][ 1 ]

dp[ 0 ][ 3 ][ 1 ] = dp[ 0 ][ 2 ][ 0 ]

dp[ 0 ][ 100 ][ 0 ] = dp[ 0 ][ 99 ][ 0 ] + dp[ 0 ][ 99 ][ 1 ]

dp[ 0 ][ 100 ][ 1 ] = dp[ 0 ][ 99 ][ 0 ]

給定值為 1 時,dp[ 1 ][ 2 ][ 0 ] = dp[ 1 ][ 1 ][ 0 ] + dp[ 1 ][ 1 ][ 1 ]

dp[ 1 ][ 2 ][ 1 ] = dp[ 1 ][ 1 ][ 0 ] + dp[ 0 ][ 1 ][ 1 ]

dp[ 1 ][ 3 ][ 0 ] = dp[ 1 ][ 2 ][ 0 ] + dp[ 1 ][ 2 ][ 1 ]

dp[ 1 ][ 3 ][ 1 ] = dp[ 1 ][ 2 ][ 0 ] + dp[ 0 ][ 2 ][ 1 ]

dp[ 1 ][ 100 ][ 0 ] = dp[ 1 ][ 99 ][ 0 ] + dp[ 1 ][ 99 ][ 1 ]

dp[ 1 ][ 100 ][ 1 ] = dp[ 1 ][ 99 ][ 0 ] + dp[ 0 ][ 99 ][ 1 ]

給定值為 2 時,dp[ 2 ][ 2 ][ 0 ] = dp[ 2 ][ 1 ][ 0 ] + dp[ 2 ][ 1 ][ 1 ]

dp[ 2 ][ 2 ][ 1 ] = dp[ 2 ][ 1 ][ 0 ] + dp[ 1 ][ 1 ][ 1 ]

dp[ 2 ][ 3 ][ 0 ] = dp[ 2 ][ 2 ][ 0 ] + dp[ 2 ][ 2 ][ 1 ]

dp[ 2 ][ 3 ][ 1 ] = dp[ 2 ][ 2 ][ 0 ] + dp[ 1 ][ 2 ][ 1 ]

dp[ 2 ][ 100 ][ 0 ] = dp[ 2 ][ 99 ][ 0 ] + dp[ 2 ][ 99 ][ 1 ] 

dp[ 2 ][ 100 ][ 1 ] = dp[ 2 ][ 99 ][ 0 ] + dp[ 1 ][ 99 ][ 1 ]

給定值為100時,dp[ 100 ][ 2 ][ 0 ] = dp[ 100 ][ 1 ][ 0 ] + dp[ 100 ][ 1 ][ 1 ]

dp[ 100 ][ 2 ][ 1 ] = dp[ 100 ][ 1 ][ 0 ] + dp[ 99 ][ 1 ][ 1 ]

dp[ 100 ][ 3 ][ 0 ] = dp[ 100 ][ 2 ][ 0 ] + dp[ 100 ][ 2 ][ 1 ]

dp[ 100 ][ 3 ][ 1 ] = dp[ 100 ][ 2 ][ 0 ] + dp[ 99 ][ 2 ][ 1 ]

dp[ 100 ][ 100 ][ 0 ] = dp[ 100 ][ 99 ][ 0 ] + dp[ 100 ][ 99 ][ 1 ] 

dp[ 100 ][ 100 ][ 1 ] = dp[ 100 ][ 99 ][ 0 ] + dp[ 99 ][ 99 ][ 1 ]

當輸入n 和 y 時 , 輸出dp[ y ][ n ][ 0 ] + dp[ y ][ n ][ 1 ] 即為二進位制數的個數;

下面給出相應思路的**:

#includeusing namespace std ;

int main() ;

dp[0][1][0] = 1 ;

dp[0][1][1] = 1 ;

for(i = 2 ; i <= 100 ; i++)

for(i = 1 ; i <= 100 ; i++)

for(int j = 2 ; j <= 100 ; j++)

int n ;

cin >> n ;

while(n--)

return 0 ;

}

二進位制 二進位制起源

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

判斷二進位製半整數(二進位制)

10年後,tokitsukaze大佬已經變成了年收入超百萬的的精英程式設計師,家裡沒錢也沒礦的teitoku,找tokitsukaze大佬借1000塊錢,然後tokitsukaze大佬說,借你1024吧,湊個整數。沒錯在2進製下1024是 二進位制整數 乙個正整數滿足其值為2的k次方 k為正整數 我...

mysql二進位制 MySql二進位制連線方式詳解

使用mysql二進位制方式連線 您可以使用mysql二進位制方式進入到mysql命令提示符下來連線mysql資料庫。例項以下是從命令列中連線mysql伺服器的簡單例項 root host mysql u root p enter password 在登入成功後會出現 mysql 命令提示視窗,你可以...