题目描述

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

输入输出格式

输入格式:

第一行有两个整数N,M用空格隔开。(1<=N<=200,1<=M<=150)

接下来的N行,第I+1行包含两个整数ki和si, ki表示第I门课的直接先修课,si表示第I门课的学分。若ki=0表示没有直接先修课(1<=ki<=N, 1<=si<=20)。

输出格式:

只有一行,选M门课程的最大得分。

输入输出样例

输入样例#1:

7  4
2  2
0  1
0  4
2  1
7  1
7  6
2  2

输出样例#1:

13

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

树形DP~

用到了神奇的森林转化为二叉树,左儿子是根节点的儿子,右儿子是根节点的兄弟~

然后就转化为了常见的树形DP,转移方程稍改一下即可。

(另:数据范围有误,应改为2000。)

#include<cstdio>
#include<iostream>
using namespace std;int n,m,fa[2001],val[2001],f[2001][2001],le[2001],ri[2001];void chan()
{for(int i=1;i<=n;i++){int u=fa[i];if(!le[u]) le[u]=i;else{u=le[u];while(ri[u]) u=ri[u];ri[u]=i;}}
}int findd(int u,int v)
{if(u<1 || v<1 || u>n || v>m) return 0;if(f[u][v]) return f[u][v];for(int i=0;i<v;i++) f[u][v]=max(f[u][v],val[u]+findd(le[u],i)+findd(ri[u],v-i-1));f[u][v]=max(f[u][v],findd(ri[u],v));return f[u][v];
}int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) scanf("%d%d",&fa[i],&val[i]);chan();printf("%d\n",findd(le[0],m));return 0;
}

洛谷 P2014 选课相关推荐

  1. 洛谷P2014【树形dp】

    P2014 选课 时间限制 1.00s 内存限制 125.00MB 题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数 ...

  2. 洛谷2014选课(树型dp)

    题目:https://www.luogu.org/problemnew/show/P2014 千万注意遍历 j 和 k 的边界! 0点很好用. siz很好用. #include<iostream ...

  3. 洛谷2014 选课(树形DP)树形背包问题

    题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分,每门课有一 ...

  4. 洛谷 深基 第4部分 基础数学与数论(19-21课)

    洛谷 深基 第4部分 基础数学与数论  第19章 位运算与进制转换 P1143 进制转换 https://www.luogu.com.cn/problem/P1143 洛谷P1143 进制转换的Pyt ...

  5. (最小割)洛谷P4313文理分科

    洛谷P4313文理分科 思路: 一下子就可以想到最小割,先不考虑一起选的情况的话,就是文理二者择其一的选择. SSS向(i,j)(i,j)(i,j)建边,权值为arti,jart_{i,j}arti, ...

  6. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  7. 洛谷 P1142 轰炸

    洛谷 P1142 轰炸 题目描述 "我该怎么办?"飞行员klux向你求助. 事实上,klux面对的是一个很简单的问题,但是他实在太菜了. klux要想轰炸某个区域内的一些地方,它们 ...

  8. 洛谷 P1387 最大正方形

    P1387 最大正方形 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=10 ...

  9. 洛谷P2763 试题库问题

    题目:https://www.luogu.org/problemnew/show/P2763 题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性. ...

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

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

最新文章

  1. [转载]C# 二进制与十进制,十进制与十六进制相互转换
  2. 2019.03.28 bzoj3594: [Scoi2014]方伯伯的玉米田(二维bit优化dp)
  3. [erlang]proc_lib源码浅析
  4. HP LoadRunner 12.02 Tutorial T7177-88037教程独家中文版
  5. 「Self-driving: Perception」感知总览
  6. Leet Code OJ 8. String to Integer (atoi) [Difficulty: Easy]
  7. app inventor2 打地鼠_春节越南旅行攻略必备手机APP推荐!旅游必备实用简单越南语...
  8. Stanley轨迹跟踪算法Python/Matlab算法实现
  9. 【Linux】Linux 守护进程的启动方法
  10. interop.cdo 发送邮件乱码_手把手教你用 Java 发送邮件,不用框架
  11. idea2021设置代码字体大小
  12. 【SpringBoot】微信点餐系统
  13. 2020年深圳杯数学建模竞赛A题
  14. 八大排序之堆排序、快速排序、基数排序(java)。
  15. mysql 全文索引 (N-gram parser)
  16. Win7如何去除快捷方式小箭头
  17. pli测试50题题库_面试人员情商测试50题1
  18. 帝国时代III亚洲王朝序列号自动输入器
  19. java工程师项目经验_最新JAVA工程师个人简历中的项目经验范文.doc
  20. vue input file 上传图片

热门文章

  1. 超有用:记一次Yapi上传报错及其处理方式
  2. IT小白重装系统大全
  3. 小偷-守卫博弈:“诡异”的纳什均衡
  4. 程序语言翻译: 2.1在以阶段划分的编译器中,贯穿于编译器工作始终的是( )。2.2 对高级语言程序进行翻译时,源程序中的变量不可能映射到( )
  5. 【3-hexo】为啥我又搭建了一个博客?【服务器自建博客】
  6. win7右键反应特别慢的问题
  7. 试题 算法提高 断案
  8. 旋风系统时间与服务器不一致,更新公告 | 8月15日早8点停服维护
  9. Java华氏度与摄氏度之间的转换
  10. 2021年2月世界编程语言排行榜