20201009day30 複習3 數字dp

2022-05-20 09:20:20 字數 860 閱讀 7051

lgp2657 [scoi2009]windy數

求\([a,b]\)之間「\(a\)數」的個數。

乙個數被稱為「\(a\)數」,當且僅當它不含前導零且相鄰兩個數字之差至少為2.

\(1\le a \le b \le 2\times 10^9\)

只需要規定函式work(x)求\([1,x]\)內所有的「\(a\)數」的個數,字首和就好。

設\(dp_\)表示長度為\(i\)中最高位是\(j\)的「\(a\)數」

方程:\[dp_=\sum_^ dp_

\]初始值:

\[dp_=1(i\in[0,9],i\in\mathbb z)

\]

#includeusing namespace std;

//設dp[i][j]為長度為i中最高位是j的windy數的個數

//方程 dp[i][j]=sum(dp[i-1][k]) 其中 abs(j-k)>=2

int p,q,dp[15][15],a[15];

void init()

} }//從第二位開始 每次列舉最高位j 並找到k 使得j-k>=2

}int work(int x) //計算<=x的windy數

//分為幾個板塊 先求len-1位的windy數 必定包含在區間裡的

for(int i=1;i<=len-1;i++)

}//然後是len位 但最高位=1;i--)

if(abs(a[i+1]-a[i])<2) break;

// if(i==1) ans+=1;

}return ans;

}int main()

20201009day30 刷題記錄

對於每個時間點,詢問兩點之間的路徑 針對不同時間點各個點之間連通性不同 floyd的本質是中 for k 1 k n k for i 1 i n i for j 1 j n j if e i j e i k e k j e i j e i k e k j 本題 按照時間順序更新每乙個點可用的點 即為...

5月30日複習

1 物件初始化器 class1 p1 new class1 2 屬性封裝了字段。方法的多個引數封裝成乙個物件。將一堆 封裝到乙個方法中。將一些功能封裝到幾個類中。將一些具有相同功能的 封裝到了乙個程式集中,並且對外提供統一的訪問介面。3 繼承的好處 一 重用。二 多型。4 繼承的單根性 乙個類只能繼...

day 3 9基礎複習

1.不要在模組之間相互呼叫,否則會出現麻繩現象,避免迴圈匯入。用來判斷值是否相等 分別指向兩個空間,但是空間裡面的內容相同 is 判斷指向是否相等。例 a 11,22,33 b 11,22,33 a b true a is b false id a 1398041200093640 id b 139...