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;
    }

  • 相关阅读:
    数据库系统load飙高问题解决思路
    随Linux开机自动启动mysql
    mysql_safe和mysql_multi
    mysqlslap压测
    “努力就会成功”
    MongonDB 知识
    Linux系统下MongoDB的简单安装与基本操作
    性能压测,更新库存时间长
    Buffer Latch Timeout的解析
    SQL Server 性能调优(一)——从等待状态判断系统资源瓶颈
  • 原文地址:https://www.cnblogs.com/alan-W/p/5929162.html
Copyright © 2011-2022 走看看