
拓扑排序&关键路径&数位dp
发布日期:2021-05-14 13:34:33
浏览次数:17
分类:精选文章
本文共 816 字,大约阅读时间需要 2 分钟。
今上午看了拓扑排序和关键路径,了解了基本原理,至于代码还只看了模版,题目还没有多看。
今下午和晚上,复习了数位DP,有了更加深入的认识,基础题型是计算一个区间(a,b)符合某个条件的数的个数。一般数位dp是一种暴力枚举的方法。它就是在数位上一位一位的枚举,使得这种枚举方式符合dp的定义,并且使用记忆化搜索,就会节省枚举的时间。换了一个模版,实用性更大,但是不怎么好理解,暂时可以理解个大概:
- int a[20];
- int dp[20][state];
- int dfs(int pos,int zhuangtai,/*这里可能有很多状态*/int limit)
- {
- if(pos==-1)return 1;//这里根据情况不一样,返回值不一样
- if(!limit&&dp[pos][state]!=-1/*如果有前导零的题,这里还有前导零的判断*/)return dp[pos][state];
- int sum=0;
- int end=limit?a[pos]:9;//这里是根据这一位数是否应该有限制,设置枚举的最大数,不过这是十进制的
- for(int i=0;i<=end;i++)//循环
- {
- if()....//限制条件。
- sum+=dfs(pos-1,/*状态或者前导零*/limit&&i==a[pos])
- }
- if(!limit/*有时候有前导零*/)dp[pos][state];
- return sum;
- }
- int solve(int x)
- {
- int pos=0;
- while(x)
- {
- a[pos++]=x%10;
- x/10;
- }//这里是数位分解
- return dfs(pos-1,/*状态限制*/,1);
- }
- int main()
- {
- int q,w;
- while(~scanf("%d%d",&q,&w))
- {
- printf("%d\n",solve(q)-solve(w));
- }
- return 0;
- }
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月16日 20时35分35秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
有道云笔记 同步到我的博客园
2021-05-09
李笑来必读书籍整理
2021-05-09
http头部 Expect
2021-05-09
Hadoop(十六)之使用Combiner优化MapReduce
2021-05-09
《机器学习Python实现_10_06_集成学习_boosting_gbdt分类实现》
2021-05-09
CoreCLR源码探索(八) JIT的工作原理(详解篇)
2021-05-09
IOS开发Swift笔记16-错误处理
2021-05-10
flume使用中的一些常见错误解决办法 (地址已经使用)
2021-05-10
andriod 开发错误记录
2021-05-10
C语言编译错误列表
2021-05-10
看明白这两种情况,才敢说自己懂跨链! | 喵懂区块链24期
2021-05-10
张一鸣:创业7年,我经历的5件事
2021-05-10
git拉取远程指定分支代码
2021-05-10
《web安全入门》(四)前端开发基础Javascript
2021-05-10
python中列表 元组 字典 集合的区别
2021-05-10
python struct 官方文档
2021-05-10
Android DEX加固方案与原理
2021-05-10
Android Retrofit2.0 上传单张图片和多张图片
2021-05-10