HDU 2089
Posted wpbing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 2089相关的知识,希望对你有一定的参考价值。
算是数位dp的入门吧
求n到m之间数字中没有4和62(连着)的个数
#include <algorithm> #include <iostream> using namespace std; int dp[10][10]; void init(){ dp[0][0] = 1;//dp[0][1-9] = 1都可以 for(int i = 1; i <= 8; i++) for(int j = 0; j < 10; j++)//i位 for(int k = 0; k < 10; k++)//i-1位 if(j != 4 && !(j == 6 && k == 2)) dp[i][j] += dp[i-1][k]; } int solve(int n){ int d[10]; int len = 0; while(n > 0){//数组保存 d[++len] = n%10; n /= 10; } d[len + 1] = 0; int ans = 0; for(int i = len; i >= 1; i--){ for(int j = 0; j < d[i]; j++){ if(j != 4 && !(d[i+1] == 6 && j == 2)) ans += dp[i][j];//求和 } if(d[i] == 4 || (d[i] == 2 && d[i+1] == 6)) break;//判出 } return ans; } int main() { int r, l; init(); while(cin>>l>>r){ if(r + l == 0) break; cout<<solve(r+1) - solve(l)<<endl; } return 0; }
以上是关于HDU 2089的主要内容,如果未能解决你的问题,请参考以下文章