考前太焦虑了。。想8出题,就来写板子吧。去年列的目录找不到了,重新列了一个。感觉不是很全,代码一点点填吧,,拜托各位大佬在下方补充目录啊~也可以帮助一下读到这篇笔记的人$qwq$。

PS:这个板子用博客园的代码插入是真的丑,不过没时间修板子了。。。凑合用吧。。。。

成功不必在我,而功力必不唐捐。 

算法

数位dp

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<vector>
 6 #include<queue>
 7 #include<set>
 8 using namespace std;
 9 typedef long long ll;
10 
11 ll read() {
12     ll x = 0,f = 1;char c = getchar();
13     while(c < '0' || c > '9') {
14         if(c == '-') f = -1;c = getchar();
15     }
16     while(c >= '0' && c <= '9') {
17         x = x * 10 + c - '0';c = getchar();
18     }
19     return x * f;
20 }
21 int a[12],f[12][10][2],cnt;//f[i][j][k]表示前i位,第i - 1位为j,是(1)否(0)有限制的方案数 
22 int dfs(int pos,int lst,int lim) {
23     if(pos == 0) return 1;
24     if(f[pos][lst][lim] != -1) return f[pos][lst][lim];    
25     int ret = 0;    
26     int k = 9;
27     if(lim) k = a[pos];    
28     for(int i = 0;i <= k;++i) {
29         if(i == 4 || (lst == 6 && i == 2)) continue;
30         ret += dfs(pos - 1,i,lim && (i == k));
31     }
32     return f[pos][lst][lim] = ret;
33     
34 }
35 int solve(int x) {
36     memset(f,-1,sizeof(f));
37     cnt = 0;
38     while(x) {
39         a[++cnt] = x % 10;
40         x /= 10;
41     }
42     return dfs(cnt,0,1);
43 }
44 int main() {
45     while(1) {
46         int l = read(),r = read();
47         if(!l && !r) return 0;
48         printf("%d\n",solve(r) - solve(l - 1));
49     }
50     return 0;
51 }
hdu2089

相关文章:

  • 2022-02-15
  • 2021-10-26
  • 2021-04-02
  • 2022-01-30
  • 2021-10-13
  • 2021-10-11
  • 2022-12-23
猜你喜欢
  • 2021-06-02
  • 2022-02-09
  • 2022-12-23
  • 2021-12-18
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案