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,如果直接记录下数字, ...
随机推荐
- 基于Vue的SPA动态修改页面title的方法
最近基于VUE做个SPA手机端web发现动态修改页面标题通过document.title=xxxx 来修改着实蛋疼,而且在IOS的微信端据说没效果.百度发现要针对IOS的微信做点额外的操作,即:创建一 ...
- bzoj 3139: [Hnoi2013]比赛
Description 沫沫非常喜欢看足球赛,但因为沉迷于射箭游戏,错过了最近的一次足球联赛.此次联 赛共N支球队参加,比赛规则如下: (1) 每两支球队之间踢一场比赛. (2) 若平局,两支球队各得 ...
- rtmp指令解释--转
指令 Core rtmp 语法:rtmp { ... } 上下文:根 描述:保存所有 RTMP 配置的块. server 语法:server { ... } 上下文:rtmp 描述:声明一个 RTMP ...
- 详解PHP反射API
PHP中的反射API就像Java中的java.lang.reflect包一样.它由一系列可以分析属性.方法和类的内置类组成.它在某些方面和对象函数相似,比如get_class_vars(),但是更加灵 ...
- linux 写U盘出现的问题
在写U盘的时候,报了这样的错,记录如下: umount /dev/sdb // 提示未挂载 mkfs.vfat /dev/sdb // device or resource busy umount / ...
- React Native出现"Native module cannot be null"问题
经查跟PushNotification有关,需要手动完成Linking. 两步解决此问题: 配置Linking Libraries:https://facebook.github.io/react-n ...
- 解决 mysql 中文乱码
mysql版本:5.6.38 虽然创建实例时选择的是utf-8的utf8_general_ci,但是用其他程序保存中文时依旧出现乱码的情况. 记录一种可行的解决方案,即修改数据库的字符集. 由于该环境 ...
- JDK并发包常用的知识图
并发包需要注意的知识点 集合类的体系结构
- C语言学生管理系统(原版本)(自编)
/*系统特色:(大牛勿笑) *颜色提示 *文字提示 *功能 */ #include <stdio.h> #include <stdlib.h> #include <mat ...
- perl多线程使用
原文来自:博客园(华夏35度)http://www.cnblogs.com/zhangchaoyang 作者:Orisun <<=========================threa ...