解题思路:
注意事项:
参考代码:
#include<bits/stdc++.h> using namespace std; const int maxn = 320; int f[maxn][maxn],bro[maxn],son[maxn],v[maxn]; void add(int fa, int s) { bro[s] = son[fa]; son[fa] = s; } int dp(int i, int j) { if (i == -1) return 0; if (j == 0) return 0; if (f[i][j] != -1) return f[i][j]; int m = -1<<30; //最小值 // 全分兄弟 m = max( m, dp(bro[i] , j)); for (int k = 0; k <= j-1; k++) { m = max( m , dp(son[i] , k) + dp(bro[i] , j-1-k) + v[i]); } f[i][j] = m; return m; } int main() { memset(son , -1, sizeof(son)); memset(bro , -1, sizeof(bro)); memset(f , -1, sizeof(f )); int n, m; cin>>n>>m; for(int i=1;i<=n;i++) { int fa,vx; cin>>fa>>vx; add(fa,i); v[i] = vx; } cout<<dp(0, m+1); return 0; }
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题10.7 (C++代码)(都说了scanf和gets一般不要混着用)浏览:1148 |
点我有惊喜!你懂得!浏览:1273 |
C语言程序设计教程(第三版)课后习题12.1 (C语言代码)浏览:1026 |
弟弟的作业 (C++代码)浏览:1342 |
数列排序 (C语言代码)浏览:858 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:485 |
三角形 (C++代码)递归(存在大量重复计算,容易出现时间超限)浏览:836 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:701 |
循环入门练习5 (C语言代码)浏览:907 |
矩阵转置 (C语言代码)浏览:855 |