51nod1009
- 输入N(1 <= N <= 10^9)
- 输出包含1的个数
- 12
- 5
思路:一看到这道题就想到了记忆化搜索,奈何太久没打过了,忘记了太多要素,因此被此题卡了四个多小时。。。。。吐血啊
- #include<stdio.h>
- #include<string.h>
- int dis[12];
- int lg,len;
- int s[12];
- int dp[12][2];
- int check(int a){
- int i=0;
- if(a<0)
- return 0;
- int ans=0;
- for(i=0;i<=a;i++)
- ans+=dis[i]*s[i];
- //printf("%d %d\n",a,ans);
- return ans;
- }
- int dfs(int pos,int lg){
- if(pos<0)
- return 0;
- int num=lg?dis[pos]:9;
- // printf("num=%d\n",num);
- if(!lg&&dp[pos][lg]!=-1)
- return dp[pos][lg];
- int i,j;
- int ans=0;
- for(i=0;i<=num;i++){//计算当第pos位为i时时,后面pos-1位有多少种情况; (当为i时,计算的范围为i*10^(pos)----(i+1)*10^(pos)-1)
- if(i==1){
- if(lg&&i==num)
- {ans=ans+check(pos-1)+1+dfs(pos-1,lg&&(i==num));//0---check(pos-1),所以要加一
- //printf("a%d %d %d\n",pos,i,ans);
- }
- else
- {
- ans=ans+s[pos]+dfs(pos-1,lg&&(i==num));//当此位为1时,它没有被限制,那么可以分解成10000+(0---9999)(假设当前有五位)
- //printf("b%d\n",ans);//0---9999的每一个数都可以在前面加一个 。
- }
- }
- else
- {ans+=dfs(pos-1,lg&&(i==num));
- // printf("c%d\n",ans);
- }
- }
- // printf("%d %d\n",pos,ans);
- if(!lg)
- dp[pos][lg]=ans;
- return ans;
- }
- int main(){
- int n;
- len=0;
- scanf("%d",&n);
- int i;
- s[0]=1;
- for(i=1;i<=9;i++)
- s[i]=s[i-1]*10;
- while(n){
- dis[len++]=n%10;
- n=n/10;
- }
- memset(dp,-1,sizeof(dp));
- printf("%d\n",dfs(len-1,1));
- return 0;
- }
51nod1009的更多相关文章
- 51nod1009(1的数目)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1009 题意:中文题诶- 思路:分别考虑各个数位上出现1的次数 ...
- 【51nod-1009】数字1的数量
给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数. 例如:n = 12,包含了5个1.1,10,12共包含3个1,11包含2个1,总共5个1. Input 输入N( ...
- [51nod1009]数字1的数量
解题关键:数位dp,对每一位进行考虑,通过过程得出每一位上1出现的次数 1位数的情况: 在解法二中已经分析过,大于等于1的时候,有1个,小于1就没有. 2位数的情况: N=13,个位数出现的1的次数为 ...
- 51nod1042(0-x出现次数&分治)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1042 题意:中文题诶- 思路:这道题和前面的51nod100 ...
随机推荐
- js时间字符串转为标准时间
//将字符串转换为时间格式,适用各种浏览器,格式如2016-09-09T17:02:37.227"function GetTimeByTimeStr(dateString) { var ti ...
- hdu-2089 不要62 基础DP 模板
http://acm.hdu.edu.cn/showproblem.php?pid=2089 数位DP的思想时预处理以x开头长度为len的数(例如 x000~x999)的所有情况.给出一个数,可以在l ...
- 反射API(二)
<?php /** * 需求: * 创建一个类来动态调用Module对象, * 即该类可以自由加载第三方插件并集成进已有的系统,而不需要把第三方的代码硬编码进原有的代码. */ class Pe ...
- selenium 简单粗暴的定位方法
- Tree总结
树结构问题因为容易写出解法,因此经常出现在面试题中 1. 树的种类 1) Tree 2) Binary Trees 3) Binary Search Trees(BST) : used to sort ...
- svn: 提交终止
今天我遇到了svn 的问题 svn: 提交终止: “/var/www/modelfinance/modules/incomereport/views/purchase” 处于冲突状态 冲突状态搞的我 ...
- SET构造函数
set<int,greater<int>> S; 可以在第二个参数位置设置比较模板,效果和sort类似,less表示升序,greater表示降序.这样做的好处是为了方便应对题目 ...
- 数据结构与算法之PHP实现二叉树的遍历
一.二叉树的遍历 以某种特定顺序访问树中所有的节点称为树的遍历,遍历二叉树可分深度优先遍历和广度优先遍历. 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次.可以细分 ...
- 《高性能SQL调优精要与案例解析》一书谈SQL调优(SQL TUNING或SQL优化)学习
<高性能SQL调优精要与案例解析>一书上市发售以来,很多热心读者就该书内容及一些具体问题提出了疑问,因读者众多外加本人日常工作的繁忙 ,在这里就SQL调优学习进行讨论并对热点问题统一作答. ...
- Django知识点梳理
Django囊括.杂糅了 前端.数据库.Python知识看起来比较复杂! 其实就是由http请求周期为主体,延伸出来的知识 . PythonWeb服务器网关接口(Python Web Server ...