給出乙個二進位制數的位數為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 命令提示視窗,你可以...