博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷2014选课(树型dp)
阅读量:5273 次
发布时间:2019-06-14

本文共 787 字,大约阅读时间需要 2 分钟。

题目:

千万注意遍历 j 和 k 的边界!

0点很好用。

siz很好用。

#include
#include
using namespace std;int n,m,a[305],f[305][305],cnt,l[305],siz[305],x;struct Node{ int to,next;}edge[305];bool b[305];void add(int x,int y){ cnt++; edge[cnt].next=l[x]; edge[cnt].to=y; l[x]=cnt;}void dfs(int cur){ if(b[cur])return; b[cur]=1; f[cur][1]=a[cur]; siz[cur]++; for(int i=l[cur];i;i=edge[i].next) { int v=edge[i].to; dfs(v); for(int j=min(m,siz[cur]+siz[v]);j>1;j--)// for(int k=max(j-siz[cur],0);k<=siz[v]&&k

 后续的故事:

  考试的时候考出了原题,然后爆0……

  关键在于倒序。首先一定不能忘记倒序,因为实质上是省了一维的;

  而且这个倒序可以触及到1(甚至0也可以,因为有下面的k<j),这样的话在我们已有的所有 d[ ][ ] 中就已经包含了根节点的值了(别忘了提前赋 1 的值)。

  siz的更新和 j,k 边界仍然需要注意。

转载于:https://www.cnblogs.com/Narh/p/8443423.html

你可能感兴趣的文章
腾讯官方教程
查看>>
React跨域问题解决
查看>>
windows系统下删除Apache服务器有两种方法:
查看>>
3.学习Dispatcher
查看>>
iOS 程序插件及功能动态更新思路
查看>>
【appium】appium中的元素定位和基本操作
查看>>
让服务器上的pdf文件在网页中打开
查看>>
在sql server中判断是否是数值类型
查看>>
【题解】2019校内测试 字符串
查看>>
Java集合框架
查看>>
ubuntu 16.04安装opencv 3.1.0 后遇到的问题
查看>>
杨小凯 牛鬼蛇神
查看>>
discuz缓存机制
查看>>
SQL:Like 通配符及特殊用法Escape
查看>>
如何查看方法在哪里被调用
查看>>
select多选(multiSelect)的使用
查看>>
svn服务器搭建与使用
查看>>
数据结构基本术语
查看>>
Npoi导出Excel 实战篇(Webform)
查看>>
PHP获取重定向URL的几种方法
查看>>