windy 數(還是數字dp

2022-08-19 14:09:11 字數 1317 閱讀 2135

windy定義了一種windy數。不含前導零且相鄰兩個數字之差至少為2的正整數被稱為windy數。 windy想知道,

在a和b之間,包括a和b,總共有多少個windy數?

input

包含兩個整數,a b。

output

乙個整數

sample input

【輸入樣例一】

110【輸入樣例二】

2550

sample output

【輸出樣例一】

9【輸出樣例二】

20hint

【資料規模和約定】

100%的資料,滿足 1

<= a <= b <= 2000000000 。

藉此題講一下數字dp的幾個關鍵;

0,注意構造dp的轉移方程,這也是題目的突破口

1,資料是否前後包括 (100%的資料: solve(m+1)-(n));

2,注意數字判斷的順序,(x00000以下的個數->x00000~xy0000的個數->xy0000~xyz000的個數......:    for(int i=len;i>0;i--)for(int j=0;j3,根據題目首位是否需要特判(此題條件相鄰二數差至少為2,故首位沒有前導零與之相差,需要特判:即清加所有小於x00000的數)

4,特變注意數字改變節點的判斷,如無必要,之後的都無需判斷(if(abs(a[i]-a[i+1])<2)break;)

#include#include

using

namespace

std;

int dp[20][20

];int abs(intx)

void

dpin()

int solve(int

x)

//判斷所小於最高位次的數字(前導0特判

for(int i=1;i)

for(int j=1;j<10;j++)

ans+=dp[i][j]; //

printf("1 %d\n",ans);

//最高位次下最高位 (前導0特判

for(int i=1;i//

printf("2 %d\n",ans);

//低位次統計

a[len+1]=-1

;

for(int i=len-1;i>0;i--) //

printf("3 %d\n",ans);

//printf("%d\n",ans);

return

ans;

} int

main()

數字DP入門總結 不要62 windy數總結

前段時間滾去搞了一波半期 然後學校又組織的五天西安遊學 於是就乙個星期都沒有碰oi.終於回來了 學習數字dp 看了一下午 做了兩道題 才感覺摸到一點火門 直接上兩道題解吧 1.不要62 傳送門 題意不多說 是中文都看得懂 為了方便闡述 我們把不含4,62的數稱為吉利數 反之為非吉利數 這個題是在乙個...

SCOI2009 windy數 數字DP 模板題

windy定義了一種windy數。不含前導零且相鄰兩個數字之差至少為2的正整數被稱為windy數。windy想知道,在a和b之間,包括a和b,總共有多少個windy數?input 包含兩個整數,a b。output 乙個整數 sample input 輸入樣例一 1 10 輸入樣例二 25 50 s...

洛谷2657 windy數(數字DP)

數字dp經典題了。考慮直接統計r內的windy數和l 1內的windy數,兩者相減即為l r之間的windy數。考慮dp,記錄當前位以及上一位所填的數,當前是否前面為前導零,以及前面一段是否與原數相同。然後按題意逐位計算即可。然後就會驚訝的發現tle了。所以考慮優化 如果當前沒有受任何限制,那麼可以...