http://www.luogu.org/problem/show?pid=2014

(注意题目数据范围有误,建议开数组到2000)

经典树形依赖背包问题。

因为可能出现森林,所有要建立一个虚结点0,将森林中所有树的根节点作为结点0的儿子

f[i][j]表示以i为根选j个课程

f[u][j] = max(f[u][j], f[u][j-k]+f[v][k]); //v是u的儿子

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define ms(i,j) memset(i, j, sizeof(i));
using namespace std;
int n,m;
int t;
int w[2005];
vector<int>G[2005];
int f[2005][2005];
void dfs(int u)
{for (int i=1;i<=m;i++) f[u][i] = w[u];//必选u for (int i=0;i<G[u].size();i++){int v = G[u][i];dfs(v);for (int j=t;j>=2;j--){for (int k=1;k<j;k++){f[u][j] = max(f[u][j], f[u][j-k]+f[v][k]);}}}
}
int main()
{scanf("%d%d", &n, &m);for (int i=1;i<=n;i++){int ki;scanf("%d%d", &ki, &w[i]);G[ki].push_back(i);}t = m+1;//增加了一个虚结点0,将森林转为树,所以t=m+1dfs(0);printf("%d\n", f[0][m+1]);return 0;
}

转载于:https://www.cnblogs.com/flyinthesky1/p/6384286.html

|洛谷|动态规划|P2014 选课相关推荐

  1. 洛谷 动态规划一日游 P2577、P1070、P2051

    记 2018年3月19日 贼颓呢,一天就写了两道DP,还都不会写,这可GG. 动态规划真的难且有趣,算法题中动态规划占到了很大的比例,而且动态规划往往是辅助解决一些其他类型问题的基础,加深加强对动态规 ...

  2. P1541 乌龟棋 题解(洛谷,动态规划递推)

    题目:P1541 乌龟棋 感谢大神的题解(他的写的特别好) 写一下我对他的代码的理解吧(哎,蒟蒻就这能这样...) 代码: #include<bits/stdc++.h> #define ...

  3. |洛谷|动态规划|P1164 小A点菜

    http://www.luogu.org/record/lists?pid=P1164 01背包方案数 #include<cstdio> #include<algorithm> ...

  4. P1616 疯狂的采药(洛谷,动态规划递推,完全背包)

    先上题目链接:P1616 疯狂的采药 然后放AC代码: #include<bits/stdc++.h> #define ll long long using namespace std; ...

  5. 动态规划——洛谷_P1057传球游戏

    题目: 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏.游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球, ...

  6. 洛谷P2904 [USACO08MAR]跨河River Crossing 动态规划

    洛谷P2904 [USACO08MAR]跨河River Crossing 动态规划 区间DP f[ i ] 表示 将 i 头牛 运了过去,然后John 又返回所需要的最少时间 1 #include & ...

  7. 洛谷P1133 教主的花园 动态规划

    洛谷P1133 教主的花园 动态规划 这里是环状的,但是我们并不用将他破环成链 只要枚举第一个点 根据第一个点选择最后一个选择什么就行了 然后我们进行DP 注意如果当前是 2 的话要分情况 上一次是上 ...

  8. 【动态规划】洛谷 P1282 多米诺骨牌

    [动态规划]洛谷 P1282 多米诺骨牌 时间限制: 1 Sec  内存限制: 128 MB 题目描述 多米诺骨牌有上下2个方块组成,每个方块中有1~6个点.现有排成行的 上方块中点数之和记为S1,下 ...

  9. 动态规划——最长公共子序列(洛谷P1439)

    题目选自洛谷P1439 动态规划的模板题,最长公共子序列 1.譬如给定2个序列: 1 2 3 4 53 2 1 4 5 试求出最长的公共子序列. 那么 最普通的 LCS 代码: #include< ...

  10. 动态规划——最大子段和(洛谷 P1115)

    题目选择洛谷P1115 经典的动态规划基础题目,最大连续子序列和 状态转移方程为: dp[i] = max{A[i],dp[i-1]+A[i]} 题目描述 给出一个长度为 n 的序列 a,选出其中连续 ...

最新文章

  1. Android基本概念(一)
  2. HDU4000Fruit Ninja【树状数组+组合数】
  3. 第 4 章 MybatisPlus 条件构造器
  4. MapReduce简介和过程浅析
  5. Android 自定义组合控件小结
  6. python爬取qq音乐
  7. 通用高拍仪软件_动态展示和教学 良田YL1050AF高拍仪评测
  8. 【问题记录与解决】jupyter notebook 无法重命名,无法运行测试代码 || jupyter notebook 中常用的两个快捷键。
  9. w10计算机恢复出厂设置,win10强制恢复出厂设置教程
  10. 微信小程序用地理编码做地图标注
  11. MySql的详细安装与配置步骤
  12. Flink优化02--状态及Checkpoint调优
  13. android 电视移动硬盘,智能电视系统可以更换吗?怎么更换呢?
  14. 安装ps教程,ps软件安装
  15. 计算机毕业设计Java网上书店管理系统(源码+系统+mysql数据库+Lw文档)
  16. 重新定义汽车人机界面开发,Unity HMI模板正式开放使用
  17. 2012年Web设计和开发的15个趋势
  18. DVWA 不跳转_利用url跳转漏洞冒充公安局官网的骚操作
  19. 计算机课设微程序最大值,计算机组成原理课程设计(微程序)报告
  20. 零时科技 | Nomad 跨链桥被盗1.8亿美元事件分析

热门文章

  1. es 怎么验证是否安装成功_ElasticSearch(ES)预警服务 Watcher安装以及探究
  2. 跟我学算法-pca(降维)
  3. 114.maven+springmvc+spring+mybaties 项目整合
  4. 新站快速收录同时也提高内页的收录
  5. GAN 生成mnist数据
  6. 利用C++不使用递归,循环和goto,打印1到100 的某一答案分析
  7. linux SSH rsa认证方式登录需理清的问题
  8. Android学习笔记--Android开发时常用控件(一)
  9. 【课本】【No.3】随机向量定义、联合分布函数、边缘分布、统计特征的分布函数的差分,独立性、离散型条件分布列,连续型分布函数与密度函数、随机向量的函数分布
  10. Interpreting Attributions and Interactions of Adversarial Attacks论文解读