博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

{}动态规划}记忆化dp

 先搞个模板

 1 #include<stdio.h>
 2 #include<string.h>
 3 using namespace std;
 4 typedef long long ll;
 5 int a[20];
 6 ll dp[20][2];
 7 ll dfs(int pos,bool six,bool limit)
 8 {
 9     if(pos==0) return six?1:0;
10     int state=six?1:0;
11     if(!limit&&dp[pos][state]!=-1) return dp[pos][state];
12     int up=limit?a[pos]:9;
13     ll ans=0;
14     for(int i=0;i<=up;++i)
15     {
16         ans+=dfs(pos-1,six||i==6,limit&&i==a[pos]);
17     }
18     if(!limit) dp[pos][state]=ans;
19     return ans;
20 }
21 ll solve(ll x)
22 {
23     memset(dp, -1, sizeof(dp));
24     int pos=0;
25     while(x)
26     {
27         a[++pos]=x%10;
28         x/=10;
29     }
30     return dfs(pos,0,1);
31 }
32 int main()
33 {
34     ll le,ri;
35     scanf("%lld %lld",&le,&ri);
36     printf("%lld\n",solve(ri)-solve(le-1));
37     return 0;
38 }

 

posted @ 2019-03-03 14:00  GUET_uzi  阅读(276)  评论(0编辑  收藏  举报

- 创建于 2018年9月1日

这是一位ACM爱好者&数学爱好者的个人站,内容主要是算法&数据结构&数学研究的技术文章,大部分来自学习,部分来源于网络,希望对大家有所帮助。