fzu 2113 数位dp
#include<stdio.h>
#include<string.h>
#define N 20
#define ll __int64
ll dp[N][N];//最多记忆400种情况
ll digit[N];
ll dfs(ll len,ll cnt,ll ok) {
if(!len) return cnt;
if(!ok&&dp[len][cnt]!=-1)
return dp[len][cnt];
ll i,ans=0,maxx=ok?digit[len]:9;
for(i=0;i<=maxx;i++) {
if(i==1)ans+=dfs(len-1,cnt+1,ok&&i==maxx);
else
ans+=dfs(len-1,cnt,ok&&i==maxx);
}
if(!ok)
dp[len][cnt]=ans;
return ans;
}
ll f(ll n) {
ll len=0;
while(n) {
digit[++len]=n%10;
n/=10;
}
return dfs(len,0,1);
}
int main() {
ll n,m,k;
memset(dp,-1,sizeof(dp));
while(scanf("%I64d%I64d",&n,&m)!=EOF) {
if(n>m) {
k=n;
n=m;
m=k;
}
printf("%I64d\n",f(m)-f(n-1));
}
return 0;}
<pre name="code" class="cpp">/*
数位dp
直接相加更快
另一种思路
*/
#include<stdio.h>
#include<string.h>
#define N 20
#define ll __int64
ll lower[N];//储存十的倍数。
ll dp[N][10];
ll digit[N];
ll rest[N];//用来储存有多少数
ll dfs(ll len,ll cnt,ll ok) {
if(!len) return cnt==1?1:0;
if(!ok&&dp[len][cnt]!=-1)
return dp[len][cnt];
ll i,ans=0,maxx=ok?digit[len]:9;
for(i=0;i<=maxx;i++)
ans+=dfs(len-1,i,ok&&i==maxx);
if(cnt==1) {
if(!ok)
ans+=lower[len];
else
ans+=rest[len];//
}
if(!ok)
dp[len][cnt]=ans;
return ans;
}
ll f(ll n) {
ll len=0;
ll z=n;
while(n) {
digit[++len]=n%10;
rest[len]=z%lower[len]+1;//比如是163的话,因为从100-163所以取余后要加一
n/=10;
}
return dfs(len,0,1);
}
int main() {
ll i,n,m;
lower[0]=1;
memset(dp,-1,sizeof(dp));
for(i=1;i<=19;i++)
lower[i]=lower[i-1]*10;
while(scanf("%I64d%I64d",&n,&m)!=EOF) {
printf("%I64d\n",f(m)-f(n-1));
}
return 0;}
fzu 2113 数位dp的更多相关文章
- fzoj  2113数位dp
		
参考http://blog.csdn.net/xingyeyongheng/article/details/8785785 #include<stdio.h> #define ll lon ...
 - FZU 2113(数位dp)
		
题目连接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=38054 题意:求区间[a,b]中包含'1'的个数. 分析:数位dp ...
 - FZU 2113 BCD Code 数位dp
		
数位dp,但是很奇怪的是我在虚拟oj上用GUC C++提交会wa,用Visual c++提交正确,但是加上注释后提交又莫名CE--好任性啊 0 ,0 题目思路:看代码吧 注释很详细 #include& ...
 - FZU - 2109 Mountain Number 数位dp
		
Mountain Number One integer number x is called "Mountain Number" if: (1) x>0 and x is a ...
 - 数位DP之小小结
		
资料链接:http://wenku.baidu.com/view/9de41d51168884868662d623.html http://wenku.baidu.com/view/d2414ffe0 ...
 - 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP
		
[BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...
 - bzoj1026数位dp
		
基础的数位dp 但是ce了一发,(abs难道不是cmath里的吗?改成bits/stdc++.h就过了) #include <bits/stdc++.h> using namespace ...
 - uva12063数位dp
		
辣鸡军训毁我青春!!! 因为在军训,导致很长时间都只能看书yy题目,而不能溜到机房鏼题 于是在猫大的帮助下我发现这道习题是数位dp 然后想起之前讲dp的时候一直在补作业所以没怎么写,然后就试了试 果然 ...
 - HDU2089 不要62[数位DP]
		
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
 
随机推荐
- XML读取的小例子
			
public void CalculateLeave(string userAcount, string xml) //传过来的是xml内容 { try { var xmlDoc = new Syst ...
 - Spring------IOC&DI
			
一.Spring? Spring兴起:2003年,由Rod Johnson创建.总的来说,Spring Framwork从它诞生至今都一直为人所称道,它的伟大之处自此可见一斑. 核心:IOC& ...
 - Android学习笔记(十) Activity的生命周期
			
一.如何在一个应用程序中定义多个Activity -定义一个类,继承Activity -复写onCreate() setContentView(R.layout.secondLayout):设定该Ac ...
 - sql把两值之和当作条件进行查询
			
目的:把表中两个字段之和作为where条件进行过滤查询 //查询在没有过期的记录select a,b from test where a+b>now();// a:存入时间 b:有效期时间段 进 ...
 - markdown表格中怎么插入逻辑或符号|?
			
| 73向下投票接受 | 如果你删除反引号(****),使用|`黑客作品 a | r ------------|----- `a += x;` | r1 a |= y; | r2 并产生以下输出 在这 ...
 - 程序员容易忽略的SQL Server错误集锦
			
1.大小写 大写T-SQL 语言的所有关键字都使用大写,规范要求. 2.使用“;” 使用“;”作为 Transact-SQL 语句终止符.虽然分号不是必需的,但使用它是一种好的习惯,对于合并操作MER ...
 - 自己编辑Nuget拓展包,并发布Nuget服务器,提供下载使用
			
1. 在NuGet官网上注册并获取API Key 到NuGet上注册一个新的账号,然后在My Account页面,获取一个API Key,如果没有则在API keys 页面创建一个就可以. 2. 下载 ...
 - 【My First Blog】评近期国产烂片-《何以笙箫默》
			
昨晚,我脑抽去看了[何以笙箫默],看完后我的感觉就是被这部片子恶心到了,现在想起来我还是想说:何以笙箫默是烂片烂片烂片!重要的是说三遍.以前,我问电视剧版<何以笙箫默>何以这么LOW,看了 ...
 - jQuery  超过字符截取部分用星号表示
			
$(function(){ var str = $('#num').text(); if (str.length >15) { var strend = str.substring(4,str. ...
 - win10下anaconda3环境配置
			
WINDOW系统设置环境变量:我的电脑右键-属性-高级系统设置-高级-环境变量中在path中加入你系统安装anaconda的目录下的scripts中: C:\Users\***\anaconda3\S ...