从未见过的船新版本数位dp,,省去了预处理过程,直接进行计算

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int dp[][][],n,len,bit[];
//dp[i][j][k]:到i位数,前面模13=j,前面是1|不是1|有13的状态已经确定,后面的数的个数
//mod:前面%13的余数,flag=0|1|2:pos+1位不是1|是1|有13出现过了,lim:数的限制
int dfs(int pos,int mod,int flag,int lim){
if(!lim && dp[pos][mod][flag]!=-)//只有在无限制的情况下才能直接返回
return dp[pos][mod][flag];
if(pos<=)return mod==&&flag==;
int num,mod_x,flag_x,res=;
if(lim)num=bit[pos];else num=;
for(int i=;i<=num;i++){
mod_x=(mod*+i)%;
flag_x=flag;
if(flag== && i==)flag_x=;
if(flag== && i!=)flag_x=;
if(flag== && i==)flag_x=;
res+=dfs(pos-,mod_x,flag_x,lim&&i==num);
}
if(!lim)dp[pos][mod][flag]=res;
return res;
} int main(){
while(cin>>n){
memset(bit,,sizeof bit);
memset(dp,-,sizeof dp);
len=;
while(n){bit[++len]=n%;n/=;}
cout<<dfs(len,,,)<<endl;
}
}

最新文章

  1. 最牛的打字效果JS插件 typing.js
  2. [LeetCode] Convert Sorted Array to Binary Search Tree 将有序数组转为二叉搜索树
  3. mysql之TIMESTAMP(时间戳)用法详解
  4. Effective C++ -----条款13:以对象管理资源
  5. 【Tyvj1038】忠诚 线段树
  6. JS判断是不是本页面并且,给标签添加属性和属性值
  7. ORA-14452: 试图创建, 更改或删除正在使用的临时表中的索引
  8. Visual Studio的SDK配置
  9. group by 多字段分组
  10. 逢三退一(boolean数组的使用)
  11. JUnit4测试出错(一)
  12. 洛谷P2611 信息传递
  13. Oracle创建用户、授权、规则
  14. 10.spring-boot基于角色的权限管理页面实现
  15. 在Spring-Boot中实现通用Auth认证的几种方式
  16. spring jar包依赖
  17. 关于Redis缓存数据库
  18. C# Select
  19. mycat实现简单的mysql集群负载均衡
  20. PAT 1033 旧键盘打字(20)(20 分)

热门文章

  1. Kubernetes的本质
  2. Linux下用户和raid练习题
  3. C# Note35: 异步操作
  4. Node.js创建服务器和模拟客户端请求
  5. Insert Into select 与 Select Into 哪个更快?
  6. JS类型
  7. Django JSON,AJAX
  8. Git服务器Gogs简易安装-Windows环境
  9. 对于mysql数据库优化的见解
  10. 前端开发常用 Linux 命令