【HDOJ】【2089】不要62

数位DP



cxlove基础数位DP第一题

用容斥把所有的不吉利数字去掉就得到吉利数字的数量= =(满足区间减法)

 1 //HDOJ 2089
 2 #include<cmath>
 3 #include<vector>
 4 #include<cstdio>
 5 #include<cstring>
 6 #include<cstdlib>
 7 #include<iostream>
 8 #include<algorithm>
 9 #define rep(i,n) for(int i=0;i<n;++i)
10 #define F(i,j,n) for(int i=j;i<=n;++i)
11 #define D(i,j,n) for(int i=j;i>=n;--i)
12 #define pb push_back
13 using namespace std;
14 int getint(){
15     int v=0,sign=1; char ch=getchar();
16     while(!isdigit(ch)) {if(ch==‘-‘) sign=-1; ch=getchar();}
17     while(isdigit(ch))  {v=v*10+ch-‘0‘; ch=getchar();}
18     return v*sign;
19 }
20 const int N=1e6+10,INF=~0u>>2;
21 const double eps=1e-8;
22 /*******************template********************/
23 int dp[10][3];
24 void init(){
25     memset(dp,0,sizeof dp);
26     dp[0][0]=1;
27     F(i,1,6){
28         dp[i][0]=dp[i-1][0]*9-dp[i-1][1];
29         dp[i][1]=dp[i-1][0];
30         dp[i][2]=dp[i-1][2]*10+dp[i-1][0]+dp[i-1][1];
31     }
32 }
33 int solve(int n){
34     int len=0,bit[10];
35     int tmp=n;
36     for(;n;n/=10) bit[++len]=n%10;
37     bit[len+1]=0;
38     int ans=0;
39     bool flag=false;
40     D(i,len,1){
41         ans+=dp[i-1][2]*bit[i];
42         if (flag) ans+=dp[i-1][0]*bit[i];
43         if (!flag && bit[i]>4) ans+=dp[i-1][0];
44         if (!flag && bit[i+1]==6 && bit[i]>2) ans+=dp[i][1];
45         if (!flag && bit[i]>6) ans+=dp[i-1][1];
46         if (bit[i]==4 || (bit[i+1]==6 && bit[i]==2)) flag=true;
47     }
48     return tmp-ans;
49 }
50
51 int main(){
52 #ifndef ONLINE_JUDGE
53 //    freopen("input.txt","r",stdin);
54 //    freopen("output.txt","w",stdout);
55 #endif
56     init();
57     int n,m;
58     while(scanf("%d%d",&n,&m)!=EOF && n)
59         printf("%d\n",solve(m+1)-solve(n));
60     return 0;
61 }

时间: 2024-10-27 13:49:33

【HDOJ】【2089】不要62的相关文章

hdoj 2089 不要62 【打表】

题意:.. 水题 代码: #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; int s[10]; int ans[1000005] = {0, 1}; int is(int n){ //n = 62; int pre = 0, cur = 0, i; while(n){ pre = cur; cur = n%10; n /= 10; if(cur == 4||

HDOJ 2089 不要62

超级简单的数位DP.... 不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 17584    Accepted Submission(s): 5800 Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有

【HDOJ 2089】不要62

[HDOJ 2089]不要62 第一个数位dp的题 做的老困难了...不过好歹是做出来了 迈出了第一步.. 对大牛来说这种题都是小case 代码如下: #include <iostream> #include <cstdio> #include <cstring> using namespace std; int dp[8][3]; /* dp[i][0]无不吉利数字 dp[i][1]无不吉利数字且高位为2 dp[i][2]有不吉利数字 */ void Init() {

hdu 2089 不要62 (数位dp)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 思路:用变量记录吉利数,和最高位为2的吉利数还有不是吉利数的个数... code: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int dp[10][3]; //dp[i][j] ,i表示位数,j表示状态<pre name="code"

[ACM] hdu 2089 不要62(数位Dp)

不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 19043    Accepted Submission(s): 6442 Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就

HDU 2089 不要62(数位DP,三种姿势)

HDU 2089 不要62(数位DP,三种姿势) ACM 题目地址:HDU 2089 题意: 中文题意,不解释. 分析: 100w的数据,暴力打表能过 先初始化dp数组,表示前i位的三种情况,再进行推算 直接dfs,一遍搜一变记录,可能有不饥渴的全部算和饥渴的部分算情况,记录只能记录全部算(推荐看∑大的详细题解Orz) 代码: 1. 暴力 (以前写的) /* * Author: illuz <iilluzen[at]gmail.com> * File: 2089_bf.cpp * Create

hud 2089 不要62 (数位dp)

#include<stdio.h> #include<string.h> #include<math.h> #define max 10 int dp[max][3]; int number[max]; //dp[i][0] 前i位数中不符合要求的总个数 //dp[i][1] 前i位数中最高位是2的个数 //dp[i][2] 前i位数中存在含4和有连续62的个数 void init() { memset(dp,0,sizeof(dp)); dp[0][0]=1; for

HDU - 2089 不要62 (暴力或数位DP)

Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众. 不吉利的数字为所有含有4或62的号码.例如: 62315 73418 88914 都属于不吉利号码.但是,61152虽然含有6和2,但不是62连号,所以不属于不吉利数字之列. 你的任务是,对于每次给出的一个牌照区间号,推断出交管局今次又要实际上给多少辆新

HDOJ 题目2089 不要62(数位DP,重刷)

不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 25399    Accepted Submission(s): 8793 Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就

HDOJ题目2089 不要62(数位DP)

不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 25391    Accepted Submission(s): 8788 Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就