首页 > TAG信息列表 > CTSC1997
P2014 [CTSC1997] 选课 -树形dp
#include <bits/stdc++.h> #define debug(x) std::cerr << "[" << __LINE__ << "]: " << #x << " = " << x << "\n" using i64 = long long; const int N = 300 + 5;[CTSC1997] 选课
一道典型的树型dp 首先每门课肯定只能选择一次,那么毫无疑问是一道树上的01背包,容量可以看作科目的门数 设计状态:\(f[i][j]代表了以i为根节点的子树中选择j门课程获得的最大得分\) 转移:对于节点\(x\),进行01背包的转移(记得倒序!记得倒序!记得倒序!) 小细节:对于每个节点的转移,若它不是[CTSC1997] 选课
[CTSC1997] 选课 人生中的第一道树形 \(DP\) . 这是一道树形 \(DP\) , 很显然, 这个题的课程关系是一个森林, 我们把 \(0\) 节点也算上, 就成了一棵树. 我们设状态 \(f[u][i]\) 表示以 \(u\) 为根节点的子树中选 \(i\) 个课程的最大学分. 转移: \(f[u][i] = max(f[v1][j1] + f[v2]【树形dp】洛谷 P2014 [CTSC1997]选课
题链 dp[u][j]表示u这个节点取j个物品的最大值(包含u点); 设v是u的一个子节点,并且递归求解出dp[v][j],递归终点就是dp[v][1] = val[v](val[v] 表示点v的权值),然后合并u,v; 答案就是dp[0][m+1],从0号点选取m+1个物品的最大值(0号物品val[0] = 0); #include <bits/stdc++.h> using namespace stdP2014 [CTSC1997]选课
Miku 从叶子结点开始,自下而上得跑分组背包 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int n,m; int s[301]; struct b{ int to; int ne; }e[301]; int son[301]; int p; int dp[301][301]; int so[301][301「CTSC1997」选课
Description 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习。现在有 N 门功课,每门课有个学分,每门课有一门或没有直接先修课(若课程a是课程b的先修课即只有学完了课程a,才能学习课