洛谷 P2014 选课
题目描述
在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习。现在有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门课程的最大得分。
输入输出样例
7 4 2 2 0 1 0 4 2 1 7 1 7 6 2 2
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 选课相关推荐
- 洛谷P2014【树形dp】
P2014 选课 时间限制 1.00s 内存限制 125.00MB 题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数 ...
- 洛谷2014选课(树型dp)
题目:https://www.luogu.org/problemnew/show/P2014 千万注意遍历 j 和 k 的边界! 0点很好用. siz很好用. #include<iostream ...
- 洛谷2014 选课(树形DP)树形背包问题
题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分,每门课有一 ...
- 洛谷 深基 第4部分 基础数学与数论(19-21课)
洛谷 深基 第4部分 基础数学与数论 第19章 位运算与进制转换 P1143 进制转换 https://www.luogu.com.cn/problem/P1143 洛谷P1143 进制转换的Pyt ...
- (最小割)洛谷P4313文理分科
洛谷P4313文理分科 思路: 一下子就可以想到最小割,先不考虑一起选的情况的话,就是文理二者择其一的选择. SSS向(i,j)(i,j)(i,j)建边,权值为arti,jart_{i,j}arti, ...
- 洛谷-题解 P2672 【推销员】
独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...
- 洛谷 P1142 轰炸
洛谷 P1142 轰炸 题目描述 "我该怎么办?"飞行员klux向你求助. 事实上,klux面对的是一个很简单的问题,但是他实在太菜了. klux要想轰炸某个区域内的一些地方,它们 ...
- 洛谷 P1387 最大正方形
P1387 最大正方形 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=10 ...
- 洛谷P2763 试题库问题
题目:https://www.luogu.org/problemnew/show/P2763 题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性. ...
- 动态规划——洛谷_P1057传球游戏
题目: 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏.游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球, ...
最新文章
- [转载]C# 二进制与十进制,十进制与十六进制相互转换
- 2019.03.28 bzoj3594: [Scoi2014]方伯伯的玉米田(二维bit优化dp)
- [erlang]proc_lib源码浅析
- HP LoadRunner 12.02 Tutorial T7177-88037教程独家中文版
- 「Self-driving: Perception」感知总览
- Leet Code OJ 8. String to Integer (atoi) [Difficulty: Easy]
- app inventor2 打地鼠_春节越南旅行攻略必备手机APP推荐!旅游必备实用简单越南语...
- Stanley轨迹跟踪算法Python/Matlab算法实现
- 【Linux】Linux 守护进程的启动方法
- interop.cdo 发送邮件乱码_手把手教你用 Java 发送邮件,不用框架
- idea2021设置代码字体大小
- 【SpringBoot】微信点餐系统
- 2020年深圳杯数学建模竞赛A题
- 八大排序之堆排序、快速排序、基数排序(java)。
- mysql 全文索引 (N-gram parser)
- Win7如何去除快捷方式小箭头
- pli测试50题题库_面试人员情商测试50题1
- 帝国时代III亚洲王朝序列号自动输入器
- java工程师项目经验_最新JAVA工程师个人简历中的项目经验范文.doc
- vue input file 上传图片