码迷,mamicode.com
首页 > 其他好文 > 详细

73: luogu 2014 树形dp

时间:2018-10-30 17:32:45      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:include   efi   mes   ons   fine   多少   完整   获得   void   

$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

标签:include   efi   mes   ons   fine   多少   完整   获得   void   

原文地址:https://www.cnblogs.com/shandongs1/p/9876895.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!