2018年12月

重题,双倍经验。https://llf0703.com/p/uva-1292.html而且uva的题还有多组输出,删掉就行了。struct Edge{ int next,to; } edge[3005]; int head[1505],n,m,a,b,c,cnt,f[1505][2],out[1505]; inline void add(int u,int v) { edg...
题解 动态规划-树形DP
提高+/省选-
要不是徐妈让我做,我这辈子都不可能碰这道题的。这是我做过的代码最长的非数据结构题,模拟题最长也就一百来行,这道题第一次原生态(包括注释和调试)交上去有214行,删掉调试输出和合并一些if后也有174行。况且我一点优化都没加,纯种裸暴搜,加了优化不知道有多复杂。不过这题暴力能过就是了,吸氧前最大点1618ms,吸氧后774ms。思路整个过程可以分为 移动 --> 移动后的掉落 -->...
题解 算法-搜索
提高+/省选-
跟舞会那道题差不多,如果父节点没有取那么所有子节点都必须取;如果父节点取了,子节点取或不取皆可。$$\begin{cases} f[i][1]=\sum \min(f[j][0],f[j][1]) \\ f[i][0]=\sum f[j][1] \end{cases}$$需要注意的是题目中已经把子树说明了,这就意味着只能有一个点作为根节点,所以应该连单向边,并且事先找到那个点作为根节点。st...
题解 动态规划-树形DP
提高+/省选-
大水题,题意就跟题目名一样,决策就是对于节点 $x$ 是否取当前搜到的儿子 $y$ ,显然要当前子树和要大于0我们才会取,然后dfs即可。方程式:$$f[x]+=max(f[y],0)$$struct Edge{ int next,to; } edge[32005]; int s[16005],n,m,a,b,c,cnt,head[16005],w[16005],ans; inli...
题解 动态规划-树形DP
普及+/提高
题意要从 $N$ 门课中选出 $M$ 门,有的课有价值和先决条件,求价值总和最大值。其中 $N,M\le 300$ 。题解1.多叉转二叉我们用 $f[x][cnt]$ 表示当前x节点,在以 $x$ 为根的子树中选 $cnt$ 个节点。对于每一个节点,可以有选和不选两个选项,如果不选就把 $cnt$ 全都给兄弟节点,也就是右节点;如果要选就把 $cnt$ 分别分配给 $x$ 的兄弟和以 $x$...
题解 算法-多叉树转二叉树 动态规划-树形DP
提高+/省选-
我在做某题的时候看到有个多叉树转二叉树,就去学了下,看的这篇文章:https://blog.csdn.net/c20190102/article/details/69946551然后就去找了这道题做,最开始想法是建了树以后转成二叉树然后再dfs得到深度,然后发现有点问题,因为链式前向星是逆序存边的,于是就改用临接表,然后t了很多发,不知道有多少组数据啊。去看题解发现转成二叉树以后每个树的深度...
题解 算法-多叉树转二叉树
我一看到wxh大佬题单里一道斜率优化一道cdq就果断跳过,然后终于找到一道可做的了。我一开始没看到相同面积,心想搜索时间复杂度怕是要爆炸,但也没想出其它方法,然后看了题解才发现是相同面积,那直接搜索就完事了。因为面积相同,所以每次切的长宽一定是 $x\div cnt$的倍数(cnt是当前这块能分成几份),所以直接枚举在哪里切即可。#include<bits/stdc++.h> ...
题解 算法-搜索
提高+/省选-
项目地址:https://github.com/Llf0703/pld网页地址:https://pro.llf0703.com/pld/上午徐妈找我说让我找下大佬在bzoj的刷题清单来照着刷,应该有很大帮助。不过我想如果没有一个时间顺序的话也没法向大佬一样有成长的过程,所以下午就现学了py并写了爬虫,然后先爬了wxh大佬的,毕竟比赛第三,友谊第二,______第一具体的使用方法去看READM...
项目