潜入行动 bzoj-5314 Jsoi-2018 题目大意:题目链接. 注释:略. 想法: 学长给我们除了一套考试题,三个学长一人一道这是T1. 好吧好吧,傻逼背包...... 复杂度$O(nk)$. Code: #include<bits/stdc++.h> #define mod 1000000007 #define N 100010 using namespace std; typedef long long ll; int n,K,size[N]; ll g[101][2][2]; i…
题目描述 外星人又双叒叕要攻打地球了,外星母舰已经向地球航行!这一次,JYY 已经联系好了黄金舰队,打算联合所有 JSOIer 抵御外星人的进攻. 在黄金舰队就位之前,JYY 打算事先了解外星人的进攻计划.现在,携带了监听设备的特工已经秘密潜入了外星人的母舰,准备对外星人的通信实施监听. 外星人的母舰可以看成是一棵 n 个节点. n-1 条边的无向树,树上的节点用 1,2,\cdots,n1,2,⋯,n 编号.JYY 的特工已经装备了隐形模块,可以在外星人母舰中不受限制地活动,可以神不知鬼不觉地…
BZOJ5314: [Jsoi2018]潜入行动 https://lydsy.com/JudgeOnline/problem.php?id=5314 分析: 裸树形背包,设\(f[x][i][0/1][0/1]\)表示\(x\)子树选了\(i\)个点,是否能覆盖\(x\),是否选了\(x\). 代码: #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #inc…
题意:一棵树选择恰好k个结点放置监听器 每个监听器只能监听相邻的节点 问能使得所有节点被监听的种类数 题解:反正就是很well-known的树形DP了 至于时间复杂度为什么是nk 不会不学 很好想到四维dp 在x节点放置j个 x有没有放监听器 x有没有被监听 瞎搞搞就好了 头写昏了转移就抄别人了的TAT 关键是这个题开ll会mle 不开会爆int 取%频繁还会tle 西安太热了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!…
题目链接 POJ 题解 背包树形dp板题 就是读入有点无聊,浪费了很多青春 #include<iostream> #include<cstdio> #include<cmath> #include<map> #include<string> #include<cstring> #include<algorithm> #define LL long long int #define REP(i,n) for (int i =…
luogu Sol 阶段和状态都是树形DP板子题,这里只讲一下背包的部分(转移)叭 它其实是一个分组背包模型,具体理解如下: 对于一个结点x,它由它的子结点y转移而来 在子结点y为根的树中可以选不同数量的课程,这些就可以看成一个组内的物品 具体来说,f[y][1],f[y][2],f[y][3]...这些都是一个组里的,只能选一样 注意每组内的物品只能选一样,所以枚举体积要倒序 over! Code #include<iostream> #include<cstdio> #incl…
题目链接 BZOJ5314 题解 设\(f[i][j][0|1][0|1]\)表示\(i\)为根的子树,用了\(j\)个监测器,\(i\)节点是否被控制,\(i\)节点是否放置的方案数 然后转移即可 \(O(nk^2)\)?? 用上子树大小来优化就是\(O(nk)\)的 对于子树大小都超过\(k\)的子树,转移\(O(k^2)\),这样的情况最多出现\(\frac{n}{k}\)次 对于子树大小有一个超过\(k\)的子树,没超过\(k\)的那个子树里每个点贡献\(O(k)\),这样的情况对每个点…
题意: 给出 n 节课的先修课号以及学分(先修课号指的是在学习某节课时先需要学习的课程),求学 m 节课的最大学分. 细节: 1.对于课程 a 其先修课号为 b ,对于课程 b 其先修课号为 c ,则需要学 a 的方式必须为先学 c 在学 b. 2.可能存在多门课程没有先修课号. 分析: 题目给出的先修课号是唯一的,所以我们可以将这种依赖关系构建成一棵树,所以对于每个节点的学分之和就是为从根节点到其的简单路径,所以对于每个节点相当于一个背包. 所以状态就是:dp[u][j] 表示以 u 为根的子…
题目大意:有N门功课,每门课有个学分,每门课有一门或没有直接先修课(若课程a是课程b的先修课即只有学完了课程a,才能学习课程b).一个学生要从这些课程里选择M门课程学习,问他能获得的最大学分是多少? 对于每个节点u,定义u->DP[j]为在剩余课程数为j,以u为根的子树中能够获得的最高学分,则u->DP[j]=max{sum{v->DP[k] | sum[k]==j-1}|v∈u->Son}. 当u的子节点的子节点的DP值通过递归得出后,我们可以对u的每个DP[j]做一个背包.su…
5402 选课 0x50「动态规划」例题 描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了 N(N≤300) 门的选修课程,每个学生可选课程的数量 M 是给定的.学生选修了这 M 门课并考核通过就能获得相应的学分.在选修课程中,有些课程可以直接选修,有些课程需要一定的基础知识,必须在选了其他的一些课程的基础上才能选修.例如<Windows程序设计>必须在选修了<Windows操作基础>之后才能选修.我们称<Windows操作基础&…