日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

hiho 1318 非法二进制数 dp

發布時間:2025/3/21 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hiho 1318 非法二进制数 dp 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

#1318 : 非法二進制數

時間限制:10000ms 單點時限:1000ms 內存限制:256MB

描述

如果一個二進制數包含連續的兩個1,我們就稱這個二進制數是非法的。

小Hi想知道在所有?n?位二進制數(一共有2n個)中,非法二進制數有多少個。

例如對于?n?= 3,有 011, 110, 111 三個非法二進制數。

由于結果可能很大,你只需要輸出模109+7的余數。

輸入

一個整數?n?(1 ≤?n?≤ 100)。

輸出

n?位非法二進制數的數目模109+7的余數。

樣例輸入
3
樣例輸出
3

簡單的動態規劃。

我們可以先算出一共有多少個?合法?的二進制數。 用f[n][x]表示n位二進制數,最后1位是x(x取值0或1),合法的二進制數的數目。 于是有:

f[n][0] = f[n - 1][0] + f[n - 1][1] f[n][1] = f[n - 1][0];
#include<bits/stdc++.h> using namespace std; #define ll long long #define mod 1000000007 #define pi (4*atan(1.0)) const int N=2e3+10,M=1e6+10,inf=1e9+10; ll dp[N][2]; ll quick(ll a,int x) {ll ans=1;while(x){if(x&1)ans*=a,ans%=mod;x>>=1;a*=a;a%=mod;}return ans; } int main() {int x,y,z,i,t;scanf("%d",&x);dp[1][0]=1;dp[1][1]=1;for(i=2;i<=x;i++){dp[i][0]=(dp[i-1][1]+dp[i-1][0])%mod;dp[i][1]=dp[i-1][0];}cout<<((quick(2,x)-dp[x][0]-dp[x][1])%mod+mod)%mod<<endl;return 0; }

?

?

轉載于:https://www.cnblogs.com/jhz033/p/5602909.html

總結

以上是生活随笔為你收集整理的hiho 1318 非法二进制数 dp的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。