2015 UESTC Training for Dynamic Programming H - 邱老师选妹子

H - 邱老师选妹子

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)

Submit Status

邱老师长得帅这是人尽皆知,于是追他的妹子就会很多。

但是你知道,邱老师是一个很专一的人,所以他心里面只能有一个人。

于是他决定从追他的众多妹子里挑选一个出来。于是酱神给邱老师出来一个主意,已知有一些妹子,恰好可以给她们从l到r排号,使得每一个妹子有单独的数字,而正好有r-l+1个妹子。

酱神说,我们不能要运气不好的女孩,而酱神又给了两个数字62和4,如果妹子的排号里面有62(必须是连续的)或4,那么就排除他现在给你l和r,问有多少妹子可以有幸在第一轮留下。

Input

输入的都是整数对l、r(0<l≤r<1000000),如果遇到都是0的整数对,则输入结束。

Output

每组数据输出占一行,对于每个l和r 输出有多少个妹子可以在第一轮不被排除

Sample input and output

Sample Input Sample Output
1 100
0 0
80

Hint

不好的数字为所有含有4或62的号码。例如:

62315 73418 88914

都属于不好的。但是,61152虽然含有6和2,但不是62连号

解题思路:

  这道题一看就是一个裸裸的数位dp,但是数位dp看课件还是没有学透,在沈爷的指导下,我总算是把数位dp看的差不多了,其实数位dp不难,数位dp又叫按位dp

一般情况下,有一个标准的模式,这个模式记录好后,就是更改sta和newsta的关系了 。

代码:

 1 # include<cstdio>
 2 # include<iostream>
 3 # include<fstream>
 4 # include<algorithm>
 5 # include<functional>
 6 # include<cstring>
 7 # include<string>
 8 # include<cstdlib>
 9 # include<iomanip>
10 # include<numeric>
11 # include<cctype>
12 # include<cmath>
13 # include<ctime>
14 # include<queue>
15 # include<stack>
16 # include<list>
17 # include<set>
18 # include<map>
19
20 using namespace std;
21
22 const double PI=4.0*atan(1.0);
23
24 typedef long long LL;
25 typedef unsigned long long ULL;
26
27 # define inf 999999999
28 # define MAX 1000000+4
29
30 int num[23];
31 int dp[23][2];
32
33
34 int dfs( int len, int sta, int flag )
35 {
36     if ( len == 0 )
37         return 1;
38     if ( flag==0&&dp[len][sta]!=-1 )
39         return dp[len][sta];
40
41     int ans = 0;
42     int ed = flag?num[len]:9;
43     for (int i = 0; i <= ed;i++)
44     {
45         if ( i == 4||sta&&i==2 )
46             continue;
47         ans += dfs( len-1,i==6,flag&&i==ed );
48         if ( flag == 0 )
49         {
50             dp[len][sta] = ans;
51         }
52     }
53     return ans;
54 }
55
56
57
58 int cal ( int x )
59 {
60     int cnt = 0;
61     while ( x!=0 )
62     {
63         num[++cnt] = x%10;
64         x/=10;
65     }
66     return dfs(cnt,0,1);
67
68 }
69
70 int main(void)
71 {
72     int l,r;
73     while ( scanf("%d%d",&l,&r)!=EOF )
74     {
75         if ( l==0&&r==0 )
76             break;
77         memset(dp,-1,sizeof(dp));
78         int ans = cal(r)-cal(l-1);
79         printf("%d\n",ans);
80     }
81
82     return 0;
83 }
时间: 2024-10-02 19:11:15

2015 UESTC Training for Dynamic Programming H - 邱老师选妹子的相关文章

UESTC_邱老师选妹子 2015 UESTC Training for Dynamic Programming&lt;Problem H&gt;

H - 邱老师选妹子 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 邱老师长得帅这是人尽皆知,于是追他的妹子就会很多. 但是你知道,邱老师是一个很专一的人,所以他心里面只能有一个人. 于是他决定从追他的众多妹子里挑选一个出来.于是酱神给邱老师出来一个主意,已知有一些妹子,恰好可以给她们从l到r排号,使得每一个妹子有单独的数字,而正好有r-l+1个妹

[uestc oj]H - 邱老师选妹子

H - 邱老师选妹子 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 邱老师长得帅这是人尽皆知,于是追他的妹子就会很多. 但是你知道,邱老师是一个很专一的人,所以他心里面只能有一个人. 于是他决定从追他的众多妹子里挑选一个出来.于是酱神给邱老师出来一个主意,已知有一些妹子,恰好可以给她们从l到r排号,使得每一个妹子有单独的数字,而正好有r-l+1个妹

UESTC_邱老师选妹子(二) 2015 UESTC Training for Dynamic Programming&lt;Problem I&gt;

I - 邱老师选妹子(二) Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 邱老师长得帅这是人尽皆知,于是追他的妹子就会很多.但是你知道,邱老师是一个很专一的人,所以他心里面只能有一个人.于是他决定从追他的众多妹子里挑选一个出来. 在第一轮的选拔中,剩余了一些妹子.酱神又给邱老师出主意了,因为最近酱神刚刚学习了最长上升子序列,所以这次,依然是把妹子们

UESTC_邱老师看电影 2015 UESTC Training for Dynamic Programming&lt;Problem F&gt;

F - 邱老师看电影 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 一天邱老师心血来潮想去看电影,但是邱老师的妹子想去逛街,他们谁也没有办法说服对方,于是准备来玩一个游戏来决定听谁的. 邱老师找来w只白鼠和b只黑鼠,邱老师和妹子轮流从袋子里面抓老鼠,谁先抓到白色老鼠谁就赢. 但是有酱神在旁边捣乱,邱老师每抓一只老鼠出来,酱神就偷偷的也从里面抓一只出

UESTC_邱老师玩游戏 2015 UESTC Training for Dynamic Programming&lt;Problem G&gt;

G - 邱老师玩游戏 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 邱老师最近在玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中邱老师允许攻克M个城堡并获得里面的宝物. 但由于地理位置原因,有些城堡不能直接攻克,要攻克这些城堡必须先攻克其他某一个特定的城堡.你能帮邱老师算出要获得尽量多的宝物应该攻克哪M个城堡吗? In

UESTC_酱神的旅行 2015 UESTC Training for Dynamic Programming&lt;Problem M&gt;

M - 酱神的旅行 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 酱神要去一棵树上旅行. 酱神制定了一个旅行计划,他要按顺序去m个树上的结点,a1,a2,a3,...,am. 酱神有一辆车,树上的每一条边既可以开车通过,也可以走过去,两种方法需要不同的时间.如果选择走路,酱神需要先把车停在结点上,在他下一次要开车的时候,必须先回到停车的结点取车.

UESTC_摩天轮 2015 UESTC Training for Dynamic Programming&lt;Problem K&gt;

K - 摩天轮 Time Limit: 10000/4000MS (Java/Others)     Memory Limit: 262143/262143KB (Java/Others) Submit Status 一天,冬马被春希和雪菜拉着去一起去游乐园玩. 经过了各种过山车的洗礼后,三人决定去坐摩天轮休息下. 这是一个巨大的摩天轮,每一个车厢能坐任意多的人.现在,等着坐摩天轮的有n个人(包含他们3人),摩天轮还有m个车厢可以坐人.每个人都有自己肥胖程度,出于某些原因,胖子和瘦子坐在同一节车

UESTC_男神的礼物 2015 UESTC Training for Dynamic Programming&lt;Problem A&gt;

A - 男神的礼物 Time Limit: 3000/3000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status Lweb学长是集训队里公认的男神.有一天他要给美美的学姐姐准备礼物. Lweb学长可是会魔法的哟.为了准备一份礼物,男神要加工n份材料.每一次只能加工相邻的材料. 当男神加工两个魔法值为a,b的材料,男神都要消耗a*b的体力,同时在这个地方合成出魔法值(a+b)%100的材料. 男神

UESTC_最少花费 2015 UESTC Training for Dynamic Programming&lt;Problem D&gt;

D - 最少花费 Time Limit: 30000/10000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status Bob是一个魔法师.这天,他被N座山所阻挡,这些山排成一排,每座山有一个高度.Bob需要从左往右每次跳到相邻的一座山上,相邻的两座山的高度差不能超过K,当从高度差为D的一座山跳到另一座山时要花A×D的魔法值.Bob可以改变一座山的高度,但调整后的高度不能小于0或大于1000,改变S