洛谷P2014 选课 // 树形dp&&树形背包

题意:

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

思路:

#include
using namespace std;
vectorq[1010];
int dp[500][500],val[500];
int n,m;
void dfs(int u,int d){
//    cout<<"asd"<>n>>m;
    for(int i=1;i<=n;i++){
        int x,y;
        cin>>x>>y;
        q[x].push_back(i);
        val[i]=y;
    }
    dfs(0,1);
    cout<

 

你可能感兴趣的:(dp,背包)