首页 > 其他 > 详细

【树形DP】P2014 选课

时间:2019-10-24 15:16:08      阅读:122      评论:0      收藏:0      [点我收藏+]
技术分享图片
 1 #include<iostream>
 2 #include<string>
 3 #include<queue>
 4 #include<stack>
 5 #include<vector>
 6 #include<map>
 7 #include<cstdio>
 8 #include<cstdlib>
 9 #include<algorithm>
10 #include<set>
11 #include<list>
12 #include<iomanip>
13 #include<cstring>
14 #include<cmath>
15 #include<limits>
16 using namespace std;
17 
18 #define au auto
19 #define debug(i) cout<<"<debug> "<<i<<"<\debug>"<<endl
20 #define mfor(i,a,b) for(register int i=(a);i<=(b);i++)
21 #define mrep(i,a,b) for(register int i=(a);i>=(b);i--)
22 #define LLL __int128
23 #define Re register
24 #define il inline
25 #define mem(a,b) memset(a,(b),sizeof(a))
26 typedef pair<int, int> intpair;
27 typedef long long int LL;
28 const int INF = 0x3f3f3f3f;
29 const long long int INFLL = 0x3f3f3f3f3f3f3f3f;
30 
31 int cnt;
32 int n, m;
33 const int maxn = 1010;
34 int f[maxn][maxn];
35 
36 struct Edge
37 {
38     int u, nxt;
39 }e[maxn];
40 
41 int head[maxn];
42 
43 void add(int a, int b)
44 {
45     e[++cnt].u = b;
46     e[cnt].nxt = head[a];
47     head[a] = cnt;
48 }
49 
50 void dp(int x)
51 {
52     for (Re int i = head[x]; i != -1; i = e[i].nxt)
53     {
54         int u = e[i].u;
55         dp(u);
56         mrep(j, m + 1, 1)
57         {
58             mfor(k, 0, j - 1)
59             {
60                 f[x][j] = max(f[x][j], f[u][k] + f[x][j - k]);
61             }
62         }
63     }
64 }
65 
66 int main()
67 {
68     mem(head, -1);
69     cin >> n >> m;
70     mfor(i, 1, n)
71     {
72         Re int a, b;
73         cin >> a >> b;
74         f[i][1] = b;
75         add(a, i);
76     }
77     dp(0);
78     cout << f[0][m + 1];
79 }
View Code

 

【树形DP】P2014 选课

原文:https://www.cnblogs.com/thjkhdf12/p/11731724.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!