题意:求1-n的n个数字中1出现的个数。

解法:数位dp,dp[pre][now][equa] 记录着第pre位为now,equa表示前边是否有降数字(即后边可不能够任意取,true为没降,true为已降);常规的记忆化搜索

代码:

/******************************************************
* author:xiefubao
*******************************************************/
#pragma comment(linker, "/STACK:102400000,102400000")
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <queue>
#include <vector>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#include <string.h>
//freopen ("in.txt" , "r" , stdin);
using namespace std;#define eps 1e-8
const double pi=acos(-1.0);
typedef long long LL;
const int Max=10100;
const int INF=1000000007;
int fac[10];
void init()
{fac[0]=1;fac[1]=1;for(int i=2; i<10; i++)fac[i]=fac[i-1]*10;
}
char s[20];
int dp[20][20][2];
int n;
int num[20];
int dfs(int pre,int now,int equa)
{if(pre==0)return now==1;if(dp[pre][now][equa]!=-1)return dp[pre][now][equa];int ans=0;if(now==1&&!equa)ans+=fac[pre+1];if(now==1&&equa)ans+=n%fac[pre+1]+1;int en=equa?num[pre-1]:9;for(int i=0;i<=en;i++)ans+=dfs(pre-1,i,equa&&i==num[pre-1]);return dp[pre][now][equa]=ans;
}
int getans(int t)
{int p=0;memset(dp,-1,sizeof dp);while(t){num[p++]=t%10;t/=10;}int ans=0;for(int i=0; i<=num[p-1]; i++){ans+=dfs(p-1,i,i==num[p-1]);}return ans;
}
int main()
{init();while(cin>>n){printf("%d\n",getans(n));}return 0;
}

数位dp(求1-n中数字1出现的个数)相关推荐

  1. CF628D Magic Numbers (数据大+数位dp)求[a,b]中,偶数位的数字都是d,其余为数字都不是d,且能被m整除的数的个数...

    题意:求[a,b]中,偶数位的数字都是d,其余为数字都不是d,且能被m整除的数的个数(这里的偶数位是的是从高位往低位数的偶数位).a,b<10^2000,m≤2000,0≤d≤9 a,b< ...

  2. hdu 6578 Blank dp求 给定区间中数字不同的方案数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6578 题意: 给你n个空的数列位置和k条限制,要你用0 1 2 3四个数字,每条限制由l r x组成, ...

  3. C++:求整数num中包含因子k的个数

    编写函数factors(num,k),函数功能是:求整数num中包含因子k的个数,如果没有该因子则返回0,例如:32=22222,则factors(32,2)=5.要求输入输出均在主函数中完成. #i ...

  4. Palindromic Numbers LightOJ - 1205 数位dp 求回文数

    传送门 文章目录 题意: 思路: 题意: 求[l,r][l,r][l,r]中有多少个回文数. 思路: 裸的数位dpdpdp啦,记dp[pos][pre][state]dp[pos][pre][stat ...

  5. Codeforces 1324D(红黑树+求指定区间中大于指定值的个数)

    代码: #include <bits/stdc++.h> #include<ext/pb_ds/assoc_container.hpp> #define IOS ios::sy ...

  6. SDUT - 2609 A-Number and B-Number(二分+数位dp)

    题目链接:点击查看 题目大意:规定 A 数组为所有十进制下含有 7 或者可以被 7 整除的数字,例如 A 数组中的前 10 个数为: {a[1]=7,a[2]=14,a[3]=17,a[4]=21,a ...

  7. 逊哥dp专题 总结(普通dp,斜率优化dp,数位dp)

    dp真是博大精深,本渣自叹智商不足,但是就算是不足也要拼死一搏,怒燃之 poj 3934 题意:给你n个身高都不同的人,然后排队,如果两人之间的所有人都比他们俩矮,那么他们俩可以互相看见,问你如果要正 ...

  8. 解题报告 (十四) 数位DP

    文章目录 数位DP 解题报告 HDU 4722 Good Numbers HDU 2089 不要62 HDU 3555 Bomb HDU 3652 B-number PKU 3252 Round Nu ...

  9. CodeForces - 628D Magic Numbers(数位dp)

    题目链接:点击查看 题目大意:首先规定一个不含前导零的数字如果满足: 从最高位开始,偶数位置全为 ddd 从最高位开始,奇数位置不能出现 ddd 则称该数字为 d−magicd-magicd−magi ...

最新文章

  1. 真,数学之美!用数学方式打开Facebook新Logo!旋转变换?
  2. spring Transaction Propagation 事务传播
  3. CRM项目经验总结-从DAO层到链接数据池
  4. jzoj6297-世界第一的猛汉王【切比雪夫距离,扫描线】
  5. “新基建”下,真正的数字化转型是这样的?有内味了
  6. 宿舍电源额定500w,我的电脑550w的,有什么办法能解决吗?
  7. react项目案例_教程28——使用 react-rewired 配置基本的环境(项目)
  8. D1,4CIF,CIF,QCIF各代表的分辨率大小
  9. 群发邮件避免被识别为垃圾邮件
  10. 用python计算个人所得税计算器_教你使用Python实现新个税计算器
  11. 宝塔面板的数据库地址配置
  12. Windows Debugging
  13. ocx找不到指定模块
  14. ParaView Visualizer 在ubuntu22.04环境下快速开发入门指南
  15. 树莓派python3.7.3安装opencv、TensorFlow2.3
  16. python面向对象编程实例pdf_刘德华电影全集国语 大全在线观看免费
  17. A 经此一役小红所向无敌(水题)
  18. python计算排列数 组合数
  19. 初入深度学习领域的一些小建议
  20. 134_容器_git工具_Google_guava与Apache_commons的准备工作(jar src doc)

热门文章

  1. 卡巴循环30天不限次数循环试用工具
  2. laravel项目composer安装
  3. Redis 集群部署及踩过的坑
  4. 微信公众平台开发(十一) 功能整合
  5. linux系统服务介绍
  6. Xamarin只言片语系列
  7. 使用dd命令复制ASM磁盘的spfile
  8. MFC里ON_COMMAND_RANGE消息映射的ID问题
  9. 如何为ccflow工作流引擎增加一个优先级PRI?
  10. java正则表达式课程_通过此免费课程学习正则表达式