zoukankan      html  css  js  c++  java
  • HDU 5787 K-wolf Number

    标签(空格分隔): 数位DP


    题目链接
    记录一下相邻位置的数字,前导零特殊处理

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    using namespace std;
    typedef long long ll;
    ll read()
    {
    	ll x=0,f=1;char ch=getchar();
    	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    	return x*f;
    }
    int k,num[20];
    ll l,r,f[20][11][11][11][11][2];
    ll dp(int step,int a,int b,int c,int d,int lim)
    {
    	if(step==0)return 1;
    	if(~f[step][a][b][c][d][lim])return f[step][a][b][c][d][lim];
    	int x=lim?num[step]:9;
    	ll res=0;
    	for(int i=0;i<=x;i++)
    	{
    		if(k>=2&&i==d)continue;
    		if(k>=3&&i==c)continue;
    		if(k>=4&&i==b)continue;
    		if(k>=5&&i==a)continue;
    		res+=dp(step-1,b,c,d,d==10&&i==0?10:i,lim&&i==x);
    	}
    	return f[step][a][b][c][d][lim]=res;
    }
    ll calc(ll x)
    {
    	int len=0;
    	while(x)num[++len]=x%10,x/=10;
    	memset(f,-1,sizeof(f));
    	return dp(len,10,10,10,10,1);
    }
    int main()
    {
    	while(~scanf("%lld%lld%d",&l,&r,&k))
    	{
    		printf("%lld
    ",calc(r)-calc(l-1));
    	}
    	return 0;
    }
    
  • 相关阅读:
    Response 文件下载
    Tomcat Servlet
    Junit 反射 注解
    Stream流 方法引用
    函数式接口
    网络编程
    缓冲流、转换流、序列化流、打印流
    字节流 字符流
    File类 递归
    线程池 Lambda表达式
  • 原文地址:https://www.cnblogs.com/ljzalc1022/p/9018949.html
Copyright © 2011-2022 走看看