数位dp-HDU3652
来源:互联网 发布:淘宝海外集运 编辑:程序博客网 时间:2024/06/16 07:48
A wqb-number, or B-number for short, is a non-negative integer whose decimal form contains the sub- string "13" and can be divided by 13. For example, 130 and 2613 are wqb-numbers, but 143 and 2639 are not. Your task is to calculate how many wqb-numbers from 1 to n for a given integer n.
131002001000
1122
题目:在一个数的范围里找一种能被13整除且数字中含有13的数
dp[]i[j]k[],i是数字位数, j是模13的余数,k是状态的
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int a[20];int dp[20][20][3];//状态0:前一位不为1,状态1:前一位为1,状态2:前一位为1当前位为3int dfs(int pos, int mod, int sta, bool limit){ if(pos==0) return (mod==0&&sta==2); if(!limit && dp[pos][mod][sta]!= -1) return dp[pos][mod][sta]; int up = limit ? a[pos]:9; int temp=0; for(int i=0;i<=up;i++) { int newmod = (mod*10 + i)%13; int cc = sta; if(sta==0 && i==1)cc=1; if(sta==1 && i!=1)cc=0; if(sta==1 && i==3)cc=2; temp += dfs(pos-1,newmod, cc, limit && i==up); // printf("%d\n", temp); } if(!limit) dp[pos][mod][sta] = temp; return temp;}int solve(int x){ int len = 0; while(x) { a[++len] = x%10; x/=10; } return dfs(len, 0, 0, true);}int main(){ int n; memset(dp, -1, sizeof(dp)); while(~scanf("%d",&n)) { printf("%d\n", solve(n)); } return 0;}
阅读全文
0 0
- hdu3652 数位dp
- hdu3652(数位DP)
- hdu3652(数位DP)
- hdu3652(数位dp)
- hdu3652 数位DP
- HDU3652数位DP
- hdu3652 数位dp经典
- hdu3652(数位dp)
- hdu3652(数位dp)
- HDU3652(数位DP)
- hdu3652(数位dp
- 【hdu3652】【数位DP】
- 数位dp-HDU3652
- 【数位DP】 hdu3652 B-number
- 【hdu3652】【数位DP】B-number
- 【数位DP】B-number HDU3652
- HDU3652:B-number(数位DP)
- hdu3652 B-number (数位DP)
- Type 3字体的解决办法
- 深入理解JVM--JVM基本结构
- BZOJ 4605 崂山白花蛇草水 权值线段树+K-D树
- 字串变换
- mac/linux 端口占用情况
- 数位dp-HDU3652
- ios-GCD介绍
- 长连接和短连接对比
- HDU 5412 CRB and Queries && BZOJ 3110: [Zjoi2013]K大数查询 (整体二分+树状数组/线段树)
- Ubuntu安装Nginx+MySQL+PHP(LNMP)
- 使用自己训练的KITTI数据集,用Python做detectnet侦测
- 微信开发,小程序支付之间的关联-小程序支付开发2
- 重复的轮子通用操作系统内核
- 中国剩余定理