数位dp(求1-n中数字1出现的个数)
题意:求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出现的个数)相关推荐
- 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< ...
- hdu 6578 Blank dp求 给定区间中数字不同的方案数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6578 题意: 给你n个空的数列位置和k条限制,要你用0 1 2 3四个数字,每条限制由l r x组成, ...
- C++:求整数num中包含因子k的个数
编写函数factors(num,k),函数功能是:求整数num中包含因子k的个数,如果没有该因子则返回0,例如:32=22222,则factors(32,2)=5.要求输入输出均在主函数中完成. #i ...
- Palindromic Numbers LightOJ - 1205 数位dp 求回文数
传送门 文章目录 题意: 思路: 题意: 求[l,r][l,r][l,r]中有多少个回文数. 思路: 裸的数位dpdpdp啦,记dp[pos][pre][state]dp[pos][pre][stat ...
- Codeforces 1324D(红黑树+求指定区间中大于指定值的个数)
代码: #include <bits/stdc++.h> #include<ext/pb_ds/assoc_container.hpp> #define IOS ios::sy ...
- 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 ...
- 逊哥dp专题 总结(普通dp,斜率优化dp,数位dp)
dp真是博大精深,本渣自叹智商不足,但是就算是不足也要拼死一搏,怒燃之 poj 3934 题意:给你n个身高都不同的人,然后排队,如果两人之间的所有人都比他们俩矮,那么他们俩可以互相看见,问你如果要正 ...
- 解题报告 (十四) 数位DP
文章目录 数位DP 解题报告 HDU 4722 Good Numbers HDU 2089 不要62 HDU 3555 Bomb HDU 3652 B-number PKU 3252 Round Nu ...
- CodeForces - 628D Magic Numbers(数位dp)
题目链接:点击查看 题目大意:首先规定一个不含前导零的数字如果满足: 从最高位开始,偶数位置全为 ddd 从最高位开始,奇数位置不能出现 ddd 则称该数字为 d−magicd-magicd−magi ...
最新文章
- 真,数学之美!用数学方式打开Facebook新Logo!旋转变换?
- spring Transaction Propagation 事务传播
- CRM项目经验总结-从DAO层到链接数据池
- jzoj6297-世界第一的猛汉王【切比雪夫距离,扫描线】
- “新基建”下,真正的数字化转型是这样的?有内味了
- 宿舍电源额定500w,我的电脑550w的,有什么办法能解决吗?
- react项目案例_教程28——使用 react-rewired 配置基本的环境(项目)
- D1,4CIF,CIF,QCIF各代表的分辨率大小
- 群发邮件避免被识别为垃圾邮件
- 用python计算个人所得税计算器_教你使用Python实现新个税计算器
- 宝塔面板的数据库地址配置
- Windows Debugging
- ocx找不到指定模块
- ParaView Visualizer 在ubuntu22.04环境下快速开发入门指南
- 树莓派python3.7.3安装opencv、TensorFlow2.3
- python面向对象编程实例pdf_刘德华电影全集国语 大全在线观看免费
- A 经此一役小红所向无敌(水题)
- python计算排列数 组合数
- 初入深度学习领域的一些小建议
- 134_容器_git工具_Google_guava与Apache_commons的准备工作(jar src doc)