73: luogu 2014 树形dp

Posted shandongs1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了73: luogu 2014 树形dp相关的知识,希望对你有一定的参考价值。

$des$

在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习。现在有N门功课,每门课有个学分,每门课有一门或没有直接先修课(若课程a是课程b的先修课即只有学完了课程a,才能学习课程b)。一个学生要从这些课程里选择M门课程学习,问他能获得的最大学分是多少?

$des$

建出完整的树后 dp

#include <bits/stdc++.h>

using namespace std;

#define Rep(i, a, b) for(int i = a; i <= b; i ++)

const int N = 305;

int fa[N];
vector <int> G[N];
int n, q;
int w[N];
int f[N][N];

void Dfs(int u) {
       int S = G[u].size();
    Rep(i, 0, S - 1) {
        int v = G[u][i];
        Dfs(v);
        for(int j = q + 1; j >= 1; j --) {
            for(int k = 0; k < j; k ++) {
                f[u][j] = max(f[u][j], f[v][k] + f[u][j - k]);
            }
        }
    }
}

int main() {
    cin >> n >> q;
    Rep(i, 1, n) {
        cin >> fa[i] >> w[i];
        f[i][1] = w[i];
        G[fa[i]].push_back(i);
    }
    Dfs(0);
    cout << f[0][q + 1];
    
    return 0;
}

 

以上是关于73: luogu 2014 树形dp的主要内容,如果未能解决你的问题,请参考以下文章

Luogu P2014 选课 (树形DP)

树形DP水题系列:FAR-FarmCraft [POI2014][luogu P3574]

结题报告:luogu P2014

树形dp入门-加分二叉树(luogu1040)

[Luogu2015]二叉苹果树(树形dp)

[Luogu P1122]最大子树和 (简单树形DP)