上一次的节点选择算法由于春节过年耽搁了,现在重新补上

上篇链接:算法刷题系列(四)蓝桥杯python算法训练3

- 经验教训

在纷繁复杂的使用了列表来暂存数据之后,发现其实可以利用笔者自己不太常用的字典遍历来减少内存占用,于是更新代码为:

n = int(input())
weight_list =[0] +  list(map(int, input().split()))
aix_dict = {}
for i in range(1, n + 1):aix_dict[i] = []
for i in range(n - 1):a, b = list(map(int, input().split()))aix_dict[a].append(b)aix_dict[b].append(a)def deep_copy(temp_dict):dic = {}for key in temp_dict:dic[key] = temp_dict[key]return dicdef dp(temp_dict):score = 0for key in temp_dict:dic = deep_copy(temp_dict)for k in dic[key]:if k in dic.keys():del dic[k]del dic[key]temp_score = 0if dic == {}:temp_score = weight_list[key]else:temp_score = weight_list[key] + dp(dic)if score < temp_score:score  = temp_scorereturn scoreprint(dp(aix_dict))

这其中可以发现:
1、直接将dict作为迭代器遍历和取出他的keys遍历是一样的。
2、删除字典中的元素应当使用del函数。
3、判断一个键是否在字典中原先应当使用has_key的方法,但是python3.7似乎没有这个方法,使用key in dict.keys()的效果是一样的。
然而优化后的结果在测试点执行的时候依旧存在超时的问题。因此开始研究树形DP。

- 树形DP
树形DP给我的启发是很大的,首先附上代码:

def dfs(node,pre):global value,tablefor i in table.get(node):if i !=pre:dfs(i,node)value[node][0]+=max(value[i][0],value[i][1])value[node][1]+=value[i][0]def main():global value, tablen = int(input())value = list(map(int, input().split()))value = list(map(lambda x:[0,x],value))value.insert(0,0)table = {}for i in range(n):table.update({i + 1: []})for i in range(n - 1):father, child = list(map(int, input().split()))table.get(father).append(child)table.get(child).append(father)dfs(1,0)print(max(value[1][0],value[1][1]))if __name__=='__main__':main()

这个DP算法当中,通过更新value[n][2]这个二维列表来获取结果,最终要的是根节点上的值。通过0和1这个长度为2的维度来表示是否选择该节点,第一个维度则是用来标识根的。因为是树,所以只要确定了根节点,就能够知道所有的可以选择的节点。
另外,当确定了根节点之后,其余所有子节点之间是不会相邻的,这一点非常重要。这是树形DP的最核心的所在。
并且在我自己尝试DP算法的写法的时候,总是莫名其妙写成了纯粹的递归。忽略了将数组与递归函数分开存放这一美妙的方法(我总是想着遍历递归函数的返回值需要返回数组,却没想到可以为void,然后全局更新)。
此题非常具有借鉴意义,值得仔细回味。

算法刷题系列(四)蓝桥杯python算法训练3(下)相关推荐

  1. 深度优先搜索dfs算法刷题笔记【蓝桥杯】

    其实网上已经有不少dfs的算法笔记,但我之所以还再写一篇,主要是因为我目前见到的笔记,都有些太偏向理论了. 对于基础薄弱的或是没有基础的人(like me),有点不合适,因为看了,也不能说自己会了. ...

  2. 蓝桥杯python算法提高真题——幸运顾客

    蓝桥杯python算法提高真题--幸运顾客 资源限制 时间限制:2.0s 内存限制:256.0MB 为了吸引更多的顾客,某商场决定推行有奖抽彩活动."本商场每日将产生一名幸运顾客,凡购买30 ...

  3. leetcode刷题可以用python吗_LeetCode刷题——第四天(python)

    每天选壁纸做封面这个环节是我最喜欢的,今天的题目是比较经典又十分简单的一道题. 第四天--第四题(回文数) 请看题:判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整 ...

  4. 蓝桥杯 Python 算法训练 逗志芃的暴走

    问题描述 逗志芃是有妹子的现充,但是有时候妹子就是烦恼.因为逗志芃太逗了,所以这段时间妹子对逗志芃发动了技能无理取闹,妹子要去玩很多的景点.由于逗志芃之前抽机花费了太多的时间,不久以后又要微积分考试了 ...

  5. 蓝桥杯 Python 算法训练 kAc给糖果你吃

    问题描述 kAc有n堆糖果,每堆有A[i]个. kAc说你只能拿m次糖果,聪明的你当然想要拿最多的糖果来吃啦啦啦~ //第二天,kAc问你还想吃糖果么?(嘿嘿嘿)说着眼角路出奇怪的微笑... 输入格式 ...

  6. java算法提高 扫雷_Java实现 蓝桥杯VIP 算法提高 扫雷

    算法提高 扫雷 时间限制:1.0s 内存限制:256.0MB 问题描述 扫雷游戏你一定玩过吧!现在给你若干个n×m的地雷阵,请你计算出每个矩阵中每个单元格相邻单元格内地雷的个数,每个单元格最多有8个相 ...

  7. 蓝桥杯经典算法 不定方程解法 蓝桥杯练习系统 历届试题 买不到的数目

    蓝桥杯经典算法 第六讲 不定方程解法   蓝桥杯算法教学与培训_蓝桥杯经典算法 第六讲 不定方程解法 不定方程的一般解法   朴素算法 public static void main(String[] ...

  8. java 算法提高 邮票面值设计 蓝桥杯1046

    java 算法提高 邮票面值设计 蓝桥杯1046 算法提高 邮票面值设计 思路 代码 算法提高 邮票面值设计 Description 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤13) ...

  9. 蓝桥杯Python这一篇就够了-训练系统题库合集(包括VIP试题)数据结构与算法

    第一版写于2020-11-13,第十一届蓝桥杯国赛前夕,老师和同学建议说写博文可以让学习更高效,陆陆续续写一些题解和学习笔记,在我的代码中我加了很多有助于理解程序的注释,希望这篇博客可以帮助你在蓝桥杯 ...

最新文章

  1. 2月书讯 | 冬奥结束看什么?看看“天花板”级别新作!
  2. mysql 自定义提示符
  3. java jaspersoft,Jaspersoft Studio
  4. hibernate添加spring 事务管理注意问题记录
  5. mmap从低向高增长的legacy模式和从高向低增长的modern模式
  6. java 记事本全选_java 编写的记事本程序怎么实现复制 黏贴 剪切 全选的功能 ?...
  7. android在搭建框架时要注意,Android开发搭建应用框架步骤和注意的问题
  8. 进入多个页签_俄罗斯学生落地签如何办理?
  9. 软件以人为本1 - 序 - 写于上海2011 ScrumGathering会后
  10. 智能优化算法:哈里斯鹰算法-附代码
  11. Instruments-Automation: 通过命令行执行测试用例
  12. 离散数学期末复习—学习笔记
  13. MATLAB里根号打印,里根号
  14. excel自动调整列宽_Excel教程:A股上了3000点,来张股市涨跌图
  15. 盖茨与鲍尔默愤而诉Google 李开复离职有内情 -- ,买skype来控制桌面建立渠道吧
  16. Cadence仿真笔记:MOS的参数名称解释
  17. 兵法三十六计是哪些?
  18. 工业镜头景深计算及工业镜头技术分析
  19. krita windows编译源码
  20. Java Web应用开发

热门文章

  1. CryEngine3中的AI组件对象
  2. Linux下nano编辑器的快捷键使用
  3. 服务器304响应,网络---关于HTTP 304状态码的理解-Go语言中文社区
  4. 想领跑工业“F1”?我们为您带来6大“弯道超车”技巧
  5. Javaswing+MySQL实现超市收银管理系统(含源码、包运行)
  6. sublime text + LaTex 写作生成PDF | LaTex代码自动补全工具 | MiKTeX安装宏包
  7. 服务器压力测试 性能测试 AB、Webbench、Tsung
  8. 数字化和管理哲学 | 中国企业为啥用不好ERP却信中台和阿米巴
  9. 如何解读《微信技术总监谈架构:微信之道——大道至简》
  10. 无线打印服务器app,双频无线路由器打印服务器客户端软件_1.14.0613 (Windows)