zoukankan      html  css  js  c++  java
  • FZU 2113 BCD Code 数位dp

    数位dp,但是很奇怪的是我在虚拟oj上用GUC C++提交会wa,用Visual c++提交正确,但是加上注释后提交又莫名CE……好任性啊 0 ,0

    题目思路:看代码吧 注释很详细

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<vector>
    #include<stdio.h>
    #include<stdlib.h>
    #include<queue>
    #include<math.h>
    #include<map>
    #define INF 0x3f3f3f3f
    #define MAX 1000005
    #define Temp 1000000000

    using namespace std;

    long long dp[20][20];
    int num[20];

    long long dfs(int pos,int sum,int limit)
    {
    if(pos<0)//若pos小于0结束dfs
    return sum;
    if(!limit && dp[pos][sum]!=-1)//若dp里保存的是完整且无限制的数,返回dp值
    return dp[pos][sum];
    int len=limit?num[pos]:9;//若有限制,len=当前位置的数,否则len=9
    long long ans=0;
    for(int i=0;i<=len;i++)
    {
    if(i==1)//若i==1,则sum+1,若当前位置有限制且当前位置填的数为能填的最大值则下一次dfs也有限制,否则无限制
    ans+=dfs(pos-1,sum+1,limit&&i==len);
    else
    ans+=dfs(pos-1,sum,limit&&i==len);
    }
    if(!limit)//DP里保存完整的、取到尽头的数据
    dp[pos][sum]=ans;
    return ans;
    }

    long long solve(long long a)
    {
    int len=0;
    memset(num,-1,sizeof(num));
    memset(dp,-1,sizeof(dp));
    while(a)
    {
    num[len++]=a%10;
    a/=10;
    }
    return dfs(len-1,0,1);
    }

    int main()
    {
    long long a,b;
    while(scanf("%lld%lld",&a,&b)!=EOF)
    {
    long long ans=solve(b)-solve(a-1);
    printf("%I64d ",ans);
    }
    return 0;
    }

  • 相关阅读:
    可变长参数
    函数的参数
    函数
    文件操作
    字符编码
    数据类型的内置方法:集合
    数据类型的内置方法:元组
    数据类型的内置方法:字典
    数据类型内置方法:列表
    js对对象引用
  • 原文地址:https://www.cnblogs.com/alan-W/p/5929162.html
Copyright © 2011-2022 走看看