/*
数位dp
题意:找到1-n之间包括13这个子串而且可以整除13的数
解:刚開始dp[N][N][2]这里的2用来记录是否为13表示当前位是否为13,我把上一位为1当前位为13和上一位部位1
这样的情况在数组中没有记录。
*/
#include<stdio.h>
#include<string.h>
#define N 14
int dp[N][N][3];
int digit[N];
int dfs(int len,int mod,int cnt,int ok) {
if(!len) {
if(mod==0&&cnt==2)return 1;
return 0;
}
if(!ok&&dp[len][mod][cnt]!=-1)
return dp[len][mod][cnt];
int ans=0,i,maxx=ok? digit[len]:9;
for(i=0;i<=maxx;i++) {
if(cnt==2||(cnt==1&&i==3))
ans+=dfs(len-1,(mod*10+i)%13,2,ok&&i==maxx);
else
if(i==1)//刚開始这里推断条件写成if(cnt==0&&i==1)这样是不正确的由于漏掉了一种情况(i==1&&cnt==1)
ans+=dfs(len-1,(mod*10+i)%13,1,ok&&i==maxx);
else
ans+=dfs(len-1,(mod*10+i)%13,0,ok&&i==maxx);
}
if(!ok)
dp[len][mod][cnt]=ans;
return ans;
}
int f(int n) {
int len=0;
while(n) {
digit[++len]=n%10;
n/=10;
}
return dfs(len,0,0,1);
}
int main() {
int n;
memset(dp,-1,sizeof(dp));
while(scanf("%d",&n)!=EOF) {
printf("%d\n",f(n));
}
return 0;}
<pre name="code" class="cpp">/*
我原来的思路,刚開始写的时候少开了一维记录pre的情况
*/
#include<stdio.h>
#include<string.h>
#define N 14
int dp[N][N][2][2];
int digit[N];
int dfs(int len,int mod,int pre,int cnt,int ok) {
if(!len) {
if(mod==0&&cnt==1)return 1;
return 0;
}
if(!ok&&dp[len][mod][pre][cnt]!=-1)
return dp[len][mod][pre][cnt];
int ans=0,i,maxx=ok? digit[len]:9;
for(i=0;i<=maxx;i++) {
if(cnt||(pre&&i==3))
ans+=dfs(len-1,(mod*10+i)%13,i==1,1,ok&&i==maxx);
else
ans+=dfs(len-1,(mod*10+i)%13,i==1,0,ok&&i==maxx);
}
if(!ok)
dp[len][mod][pre][cnt]=ans;
return ans;
}
int f(int n) {
int len=0;
while(n) {
digit[++len]=n%10;
n/=10;
}
return dfs(len,0,0,0,1);
}
int main() {
int n;
memset(dp,-1,sizeof(dp));
while(scanf("%d",&n)!=EOF) {
printf("%d\n",f(n));
}
return 0;}


hdu 3652数位dp的更多相关文章

  1. HDU 3652(数位DP)

    题目链接:B-number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  2. [hdu 3652]数位dp解决数的倍数问题

    原以为很好的理解了数位dp,结果遇到一个新的问题还是不会分析,真的是要多积累啊. 解决13的倍数,可以根据当前余数来推,所以把当前余数记为一个状态就可以了. #include<bits/stdc ...

  3. HDU - 3652 数位DP 套路题

    题意:统计能被13整除和含有13的数的个数 解法没法好说的..学了前面两道直接啪出来了 PS.HDU深夜日常维护,没法交题,拿网上的代码随便对拍一下,输出一致 #include<bits/std ...

  4. hdu 4507 数位dp(求和,求平方和)

    http://acm.hdu.edu.cn/showproblem.php?pid=4507 Problem Description 单身! 依旧单身! 吉哥依旧单身! DS级码农吉哥依旧单身! 所以 ...

  5. hdu 4352 数位dp + 状态压缩

    XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  6. 2017中国大学生程序设计竞赛 - 网络选拔赛 HDU 6156 数位DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6156 题意:如题. 解法:数位DP,暴力枚举进制之后,就转化成了求L,R区间的回文数的个数,这个直接做 ...

  7. hdu:2089 ( 数位dp入门+模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 数位dp的模板题,统计一个区间内不含62的数字个数和不含4的数字个数,直接拿数位dp的板子敲就行 ...

  8. HDU 4352 XHXJ's LIS HDU(数位DP)

    HDU 4352 XHXJ's LIS HDU 题目大意 给你L到R区间,和一个数字K,然后让你求L到R区间之内满足最长上升子序列长度为K的数字有多少个 solution 简洁明了的题意总是让人无从下 ...

  9. hdu 3709 数位dp

    数位dp,有了进一步的了解,模板也可以优化一下了 题意:找出区间内平衡数的个数,所谓的平衡数,就是以这个数字的某一位为支点,另外两边的数字大小乘以力矩之和相等,即为平衡数例如4139,以3为支点4*2 ...

随机推荐

  1. centos7 安装python3和pip3

    centos7默认是安装的python2.7以及对于的pip 如果要使用python3并且保留python2请看以下步骤 sudo yum -y install epel-release sudo y ...

  2. 使用kubeadm部署Kubernetes v1.13.3

    kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: 1. 安装要求 在开始之前,部署Kubernetes集群 ...

  3. idea下一次Jar包依赖问题的解决过程

    项目导入后有几个类显示没找到依赖类. 第一步,定位到该类所在的jar包:pom文件没有报错,所以这应该是一个jar包版本问题,通过import路劲大概确定了jar包,我本地这个jar包一共有两个版本, ...

  4. 错误com.android.ddmlib.AdbCommandRejectedException

    错误com.android.ddmlib.AdbCommandRejectedException 学习了:https://blog.csdn.net/u014447072/article/detail ...

  5. MAC COCOA一个简单的多线程程序

    功能: 实现多线程:2个线程同一时候工作,一个用时间计数器.一个用来信息打印 STEP1 XCODE ->New Application ->Cocoa中的Command Line 自己主 ...

  6. Oracle 临时表空间 temp表空间切换

    一.TEMP表空间 临时表空间主要用途是在数据库进行排序运算.管理索引.访问视图等操作时提供临时的运算空间,当运算完成之后系统会自动清理.当oracle里需要用到sort的时候,PGA中sort_ar ...

  7. 文字溢出显示省略号,兼容ie9以上浏览器

    最近遇上一个问题,文字溢出展示省略号在ie上不管用,经过查找,是少了word-wrap: normal;这个css属性 width:100px; overflow: hidden; white-spa ...

  8. 使用python在WEB页面上生成EXCEL文件

    来自:http://blog.sina.com.cn/s/blog_5d18f85f0101bxo7.html 近日写的一个程序需要在WEB服务器上生成EXCEL文件供用户下载,研究了一下找到了以下比 ...

  9. macOS中安装docker

    如官方文档中所说: 1.点击进入boot2docker/osx-installer release页面. 2.在下载页面中点击 Boot2Docker-x.x.x.pkg 来下载 Boot2Docke ...

  10. 面向对象知识点之statickeyword的使用

    <?php /*由static定义的属性和方法称为静态成员和静态方法.static定义的属性和方法是属于类的,在对象之间共享.*/ /*比如能够通过定义一个静态变量来统计类实例化了多少个对象*/ ...