hdu_2089(数位dp)
hdu_2089(数位dp)
标签: dp
我初次接触数位dp表面上看上去挺简单,但是仔细学还是要考虑很多细节的。wa了无数次,这里引入一个
很好地博客
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
ll dp[11][11];
void init()
{
dp[0][0] = 1;
for(int i = 1; i < 7; i++){
for(int j = 0; j <= 9; j++){
if(j==4) continue;
for(int k = 0; k <= 9; k++){
if(k!=4&&!(j==6&&k==2)){
dp[i][j] += dp[i-1][k];
}
}
}
}
}
int a[10];
ll solve(int n){
ll ans = 0;
int len = 0;
while(n){
a[len++] = n%10;
n = n/10;
}
int last = 0;
a[len] = 0;//防止特判只有一位的情况
for(int i = len-1; i >= 0; i--){
for(int j = 0; j < a[i]; j++){
/* if(j!=4 && !(j==2&&last==6)){
ans += dp[i+1][j];
}
*/
if(j==4 || (last==6 && j == 2))continue;
ans += dp[i+1][j];
}
if(a[i]==4 || (a[i]==2&&last==6)) break;
last = a[i];
}
return ans;
}
int main()
{
init();
ll n,m;
while(~scanf("%I64d %I64d",&n,&m))
{
if(m==0&&n==0) return 0;
ll ans = solve(m+1)-solve(n);
printf("%I64d\n",ans);
}
return 0;
}
hdu_3555(数位dp)
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
int a[30];
ll dp[30][3];
void init()
{
dp[0][0] = 1;
dp[0][1] = dp[0][2] = 0;
for(int i = 1; i < 30; i++)
{
dp[i][0] = dp[i-1][0]*10 - dp[i-1][1];
dp[i][1] = dp[i-1][0];
dp[i][2] = dp[i-1][1] + dp[i-1][2]*10;
}
}
int main()
{
init();
int T;
scanf("%d",&T);
while(T--)
{
ll n;
scanf("%I64d",&n);
n = n+1;//
int len = 0;
while(n)
{
a[len++] = n%10;
//printf("a...%d ",a[len-1]);
n/=10;
}
// printf("%d\n",len);
bool fl = 0;
ll ans = 0;
int last = 0;
for(int i = len-1; i >= 0; i--){
ans+=dp[i][2]*a[i];
if(fl){
ans += dp[i][0]*a[i];
}
else if(a[i]>4) ans+=dp[i][1];
if(last == 4 &&a[i] == 9)fl = 1;
last = a[i];
}
printf("%I64d\n",ans);
}
return 0;
}
hdu_2089(数位dp)的更多相关文章
- 【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 ...
- 数位DP GYM 100827 E Hill Number
题目链接 题意:判断小于n的数字中,数位从高到低成上升再下降的趋势的数字的个数 分析:简单的数位DP,保存前一位的数字,注意临界点的处理,都是套路. #include <bits/stdc++. ...
- 数位dp总结
由简单到稍微难点. 从网上搜了10到数位dp的题目,有几道还是很难想到的,前几道基本都是模板题,供入门用. 点开即可看题解. hdu3555 Bomb hdu3652 B-number hdu2089 ...
- 数位DP入门
HDU 2089 不要62 DESC: 问l, r范围内的没有4和相邻62的数有多少个. #include <stdio.h> #include <string.h> #inc ...
- 数位DP之奥义
恩是的没错数位DP的奥义就是一个简练的dfs模板 int dfs(int position, int condition, bool boundary) { ) return (condition ? ...
- 浅谈数位DP
在了解数位dp之前,先来看一个问题: 例1.求a~b中不包含49的数的个数. 0 < a.b < 2*10^9 注意到n的数据范围非常大,暴力求解是不可能的,考虑dp,如果直接记录下数字, ...
随机推荐
- iOS开发--SQLite重要框架FMDB的使用
什么是FMDB: FMDB是一个和iOS的SQLite数据库操作相关的第三方框架.主要把C语言操作数据库的代码用OC进行了封装.使用者只需调用该框架的API就能用来创建并连接数据库,创建表,查询等. ...
- iOS tableview和 Collection复用机制
TableView的重用机制,为了做到显示和数据分离, tableView的实现并且不是为每个数据项创建一个tableCell.而是只创建屏幕可显示最大个数的cell,然后重复使用这些cell,对ce ...
- MySQL 使用经验
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/10 在索引中完成排序 SELECT thread_id FROM ...
- Spark源码剖析(六):Worker原理与源码剖析
上篇文章我们剖析了Master的原理和源码,知道了当Master使用资源分配算法将资源分配完成后,就会给对应的Worker发送启动Driver或者Executor的消息,那么Worker收到这些消息后 ...
- 控制input 输入框的placeholder
/*webkit placeholder居右*/ ::-webkit-input-placeholder { color: #e7e7e7; text-indent: .3rem; font-size ...
- C#序列化总结
贴一下自己序列化的代码: public class XMLUtil { /// <summary> /// XML & Datacontract Serialize & D ...
- Robot Framework学习笔记(四)------Screenshot 库屏幕截图
Scrennshot 同样为 Robot Framework 标准类库,我们只将它提供的其它中一个关键字"TakeScreenshot",它用于截取到当前窗口. 1.导入Scren ...
- 浅谈JavaScript的面向对象程序设计(二)
前面介绍通过Object构造函数或者字面量创建单个对象,但是通过这个的方法创建对象有明显的缺点:调用同一个接口创建多个实例,会产生大量的重复代码.怎么样解决? 工厂模式 工厂模式是软件工程领域经常使用 ...
- CentOS7下安装MySQL并配置远程连接
一.CentOS7下安装MySQL数据库 CentOS7默认的安装包里面已经没有 MySQL-Server安装包了,远程镜像中也没有了. 默认的是MariaDB (MySQL的一个分支,开发这个分支的 ...
- Nginx 解决WebApi跨域二次请求以及Vue单页面问题
一.前言 由于项目是前后端分离,API接口与Web前端 部署在不同站点当中,因此在前文当中WebApi Ajax 跨域请求解决方法(CORS实现)使用跨域处理方式处理而不用Jsonp的方式. 但是在一 ...