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#includeusing
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了。所以考慮優化 如果當前沒有受任何限制,那麼可以...