• B-number HDU


    //dp[i][j][0]表示i位数模13为j当前没有包含13并且最高位不为1的方案数;
    //dp[i][j][1]表示i位数模13为j当前没有包含13并且最高位为1的方案数;
    //dp[i][j][2]表示i位数模13为j当前包含13的方案数。
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define N 15
    using namespace std;
    int bit[N],dp[N][N][3];
    //遍历到的位置,前面的位数%13的余数
    //have: 是否有13
    // 
    int dfs(int pos,int mod,int have,int lim) 
    {
    	int num,ans,mod_x,have_x;
    	if(pos<=0) 
    		return mod==0&&have==2;
    	if(!lim&&dp[pos][mod][have]!=-1)
    		return dp[pos][mod][have];
    	num=lim?bit[pos]:9;
    	ans=0;
    	for(int i=0; i<=num; i++) {
    		//秦九韶算法 
    		mod_x=(mod*10+i)%13;
    		have_x=have;
    		//如果前面前一位不是1
    		//这一位是1
    		//标记有1 
    		if(have==0&&i==1) 
    			have_x=1;
    		//如果前一位是1
    		//当前位不是1
    		//那么就标记没有 
    		if(have==1&&i!=1) 
    			have_x=0;
    		//如果前一位是1
    		//当前位是3
    		//也就是有13,标记有 
    		if(have==1&&i==3) 
    			have_x=2;
    		//往下递归 
    		ans+=dfs(pos-1,mod_x,have_x,lim&&i==num);
    	}
    	//只有不受限的时候,才记录答案 
    	if(!lim) 
    		dp[pos][mod][have]=ans;
    	return ans;
    }
    int main() {
    	int n,len;
    	while(scanf("%d",&n)!=EOF) {
    		memset(bit,0,sizeof(bit));
    		memset(dp,-1,sizeof(dp));
    		len=0;
    		while(n)
    		{
    			bit[++len]=n%10;
    			n/=10;
    		}
    		printf("%d
    ",dfs(len,0,0,1));
    	}
    	return 0;
    }
    
  • 相关阅读:
    Centos设置时区和时间同步
    CentOS 安装 Docker
    Docker部署RabbitMq
    Docker部署MinIO对象存储服务
    Docker配置阿里云镜像加速
    IDEA集成Docker部署项目容器
    VMware配置静态ip
    Vue 报错 "TypeError: Cannot read property 'name' of undefined"
    持续交付-发布可靠软件的系统方法
    软件测试总结
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/12500175.html
Copyright © 2020-2023  润新知