hdu 2089

来源:互联网 发布:模拟投资软件 编辑:程序博客网 时间:2024/05/18 17:40

中文题,不需要理解题意


dp[i][j]表示长度为i,首字母为j的字符串的数目



有好多细节要注意,我刚开始想的不清,就一直在WA,以后写题想清再写......


还是代码能力弱


附代码

#include <iostream>#include <cstring>#include <cmath>#include <cstdio>#include <algorithm>using namespace std;int dp[10][10];void init(){    memset(dp,0,sizeof(dp));    dp[0][0]=1;    for(int i=1;i<=7;i++)        for(int j=0;j<10;j++)//i pos    for(int k=0;k<10;k++){//i-1 pos        if(j!=4&&!(j==6&&k==2))dp[i][j]+=dp[i-1][k];    }}int deal(int n){    int len=0;    int num[10];    memset(num,0,sizeof(num));    while(n>0){        num[++len]=n%10;        n/=10;    }    int ans=0;    num[len+1]=0;    for(int i=len;i;i--){            for(int j=0;j<num[i];j++){                 if(j!=4&&!(num[i+1]==6&&j==2)){                         ans+=dp[i][j];                 }            }            if(num[i]==4||(num[i+1]==6&&num[i]==2))break;    }    return ans;}int main(){    int n,m;    init();    while(~scanf("%d%d",&n,&m)&&(n&&m)){        printf("%d\n",deal(m+1)-deal(n));    }}


0 0
原创粉丝点击