洛谷 [P2014] 选课

Posted Mr_Wolfram的高维空间

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷 [P2014] 选课相关的知识,希望对你有一定的参考价值。

树形分组背包

注意顺序

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
using namespace std;
const int MAXN = 305;
vector <int> g[MAXN];
int dp[MAXN][MAXN], num[MAXN], fa[MAXN], rot, n, m;
void dfs(int u) {
    for(int i = 0; i < g[u].size(); i++) {
        int v = g[u][i];
        dfs(v);
        for(int j = m; j >= 0; j--) {
            for(int k = 0; k <= j; k++) {
                dp[u][j] = max(dp[u][j], dp[u][j - k] + dp[v][k]);
            }
        }
    }
    if(u) {
        for(int i = m; i >= 1; i--) {
            dp[u][i] = dp[u][i - 1] + num[u];
        }
    }
}
int main() {
    cin >> n >> m;
    for(int i = 1; i <= n; i++) {
        cin >> fa[i] >> num[i];
        g[fa[i]].push_back(i);
    }
    dfs(0);
    cout << dp[0][m] << endl;
    return 0;
}

以上是关于洛谷 [P2014] 选课的主要内容,如果未能解决你的问题,请参考以下文章

洛谷 P2014 选课

树形DP 洛谷P2014 选课

洛谷—— P2014 选课

洛谷 P2014 选课

洛谷P2014选课

洛谷P2014 TYVJ1051 选课