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 ...
随机推荐
- Python自学:第二章 修改字符串的大小写 titile.()、upper()、lower()
title.():首字母大写 upper():全大写 lower():全小写 ada lovelace:人名,传控计算机创始人 name = "ada lovelace" prin ...
- 【源码分析】Mybatis使用中,同一个事物里,select查询不出之前insert的数据
一.问题场景模拟问题:第二次查询和第一次查询结果一模一样,没有查询出我新插入的数据 猜测:第二次查询走了Mybatis缓存 疑问:那为什么会走缓存呢? 1.service方法 @Override @T ...
- android ------- 运行官方NDK 案例HelloJNI
下载案例 HelloJNI ,导入工程到Eclipse, 可以直接下载我的案例, 源码下载:https://github.com/DickyQie/android-ndk 目录图 使用命令生成 . ...
- 小程序授权demo
<button wx:if="{{canIUse}}" open-type="getUserInfo" bindgetuserinfo=" ...
- HTML(简介及常用标签)
一.HTML简介 1.1 html是什么? 超文本标记语言(Hypertext Markup Language,HTML)通过标签语言来标记要显示的网页中的各个部分.一套规则,浏览器认识的规则. 浏览 ...
- 2017-2018 ACM-ICPC, NEERC, Northern Subregional ContestG - Grand Test
题意:找三条同起点同终点的不相交的路径 题解:用tarjan的思想,记录两个low表示最小和次小的dfs序,以及最小和次小的位置,如果次小的dfs序比dfn小,那么说明有两条返祖边,那么就是满足条件的 ...
- 使用maven命令把jar包加入maven仓库
命令:mvn install:install-file -Dfile=D:\jar包路径xxxx.jar -DgroupId=根目录文件夹名字 -DartifactId=子目录文件夹 -Dversi ...
- python-flask-请求源码流程
启动先执行manage.py 中的 app.run() class Flask(_PackageBoundObject): def run(self, host=None, port=None, ...
- leetcode-algorithms-23 Merge k Sorted Lists
leetcode-algorithms-23 Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted ...
- TSFDEVTY
TSFDEVTY 用BAPI_OUTB_DELIVERY_CONFIRM_DEC做的发货过账,会VL09无法冲销需要UPDATE LIKP-VLSTK为空UPDATE likp SET vlstk = ...