洛谷—— P2014 选课
https://www.luogu.org/problem/show?pid=2014
题目描述
在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习。现在有N门功课,每门课有个学分,每门课有一门或没有直接先修课(若课程a是课程b的先修课即只有学完了课程a,才能学习课程b)。一个学生要从这些课程里选择M门课程学习,问他能获得的最大学分是多少?
输入输出格式
输入格式:
第一行有两个整数N,M用空格隔开。(1<=N<=300,1<=M<=300)
接下来的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 f[i][j]表示i课程选j门所获得的最大学分
#include <cstdio> #define min(a,b) (a<b?a:b)
#define max(a,b) (a>b?a:b)
inline void read(int &x)
{
x=; register char ch=getchar();
for(; ch>''||ch<''; ) ch=getchar();
for(; ch>=''&&ch<=''; ch=getchar()) x=x*+ch-'';
} const int N(+);
int head[N],sumedge;
struct Edge {
int v,next,w;
Edge(int v=,int next=,int w=):
v(v),next(next),w(w){}
}edge[N*N];
inline void ins(int u,int v,int w)
{
edge[++sumedge]=Edge(v,head[u],w);
head[u]=sumedge;
edge[++sumedge]=Edge(u,head[v],w);
head[v]=sumedge;
} int n,m,f[N][N];
int DFS(int u,int fa)
{
int sum=;
for(int v,i=head[u]; i; i=edge[i].next)
{
v=edge[i].v;
if(fa==v) continue;
sum+=DFS(v,u)+;
for(int j=sum; j; --j)
for(int k=; k<j; ++k)
f[u][j]=max(f[u][j],f[u][j-k-]+f[v][k]+edge[i].w);
}
return sum;
} int Presist()
{
read(n),read(m);
for(int w,u,v=; v<=n; ++v)
read(u),read(w),ins(u,v,w);
DFS(,-);
printf("%d\n",f[][m]);
return ;
} int Aptal=Presist();
int main(){;}
洛谷—— P2014 选课的更多相关文章
- 洛谷 P2014 选课(树形背包)
		
洛谷 P2014 选课(树形背包) 思路 题面:洛谷 P2014 如题这种有依赖性的任务可以用一棵树表示,因为一个儿子要访问到就必须先访问到父亲.然后,本来本题所有树是森林(没有共同祖先),但是题中的 ...
 - 树形DP 洛谷P2014 选课
		
洛谷P2014 选课 题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门 ...
 - 洛谷P2014——选课
		
题目:https://www.luogu.org/problemnew/show/P2014 树状DP,注意枚举当前子树中选几个时的边界. 代码如下: #include<iostream> ...
 - 洛谷P2014 选课 (树形dp)
		
10月1日更新.题目:在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分 ...
 - 洛谷P2014 选课
		
首先分析题目,这是一道树形dp的题目,是树形背包类的问题,以为每门课的先修课只有一门,所以这一定可以 构成一个森林结构,于是我们可以设计一个虚拟的根节点作为森林的根. 状态转移方程如下 dp[v][k ...
 - 洛谷 P2014 选课
		
题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分,每门课有一 ...
 - 洛谷 P2014 选课 && caioj 1108 树形动态规划(TreeDP)3:选课
		
这里的先后关系可以看成节点和父亲的关系 在树里面,没有父亲肯定就没有节点 所以我们可以先修的看作父亲,后修的看作节点 所以这是一颗树 这题和上一道题比较相似 都是求树上最大点权和问题 但这道题是多叉树 ...
 - C++ 洛谷 2014 选课 from_树形DP
		
洛谷 2014 选课 没学树形DP的,看一下. 首先要学会多叉树转二叉树. 树有很多种,二叉树是一种人人喜欢的数据结构,简单而且规则.但一般来说,树形动规的题目很少出现二叉树,因此将多叉树转成二叉树就 ...
 - 洛谷P2014   TYVJ1051 选课
		
题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分,每门课有一 ...
 
随机推荐
- jquerymobile之collapsible可折叠块标题内容动态显示
			
jquery mobile提供了一种可折叠的组件--data-role="collapsible",这种组件可以通过点击折叠块头部来展开/折叠块内的内容,详细组件说明可参考w3cs ...
 - 用SQL实现统计报表中的“小计”和“合计”
			
问题: 开发一个关于各烟叶等级的二次验级的原发件数.原发重量及验收重量的统计报表.其中,原发件数.原发重量和验收重量等列要求计算出各等级组别的小计和所有记录的合计. 语句: SELECT DECODE ...
 - 解决IE不支持Data.parse()的问题
			
Date.parse()函数的返回值为Number类型,返回该字符串所表示的日期与 1970 年 1 月 1 日午夜之间相差的毫秒数. var nowtime = "2017-02-08&q ...
 - JQuery 数据加载中禁止操作页面
			
比较常见的做法,但对我而言是第一次做,记录一下. 为了把找来的loading.gif 的背景色设置为透明,还特意装了quicktime. 有学到一些额外的东西. 先将div及img定义好 <bo ...
 - SQLServer2008 去除换行符
			
declare @str varchar(8000)set @str='SQL语句' select replace(@str,char(10),'')
 - Inception搭建
			
Inception安装Inception是集审核.执行.回滚于一体的一个自动化运维系统,它是根据MySQL代码修改过来的,用它可以很明确的,详细的,准确的审核MySQL的SQL语句,它的工作模式和My ...
 - Linux下Shell脚本输出带颜色文字
			
文本终端的颜色可以使用“ANSI非常规字符序列”来生成.举例: echo -e "\033[44;37;5m ME \033[0m COOL" 以上命令设置作用如下: 背景色为蓝色 ...
 - BZOJ 1106: [POI2007]立方体大作战tet 树状数组 + 贪心
			
Description 一个叫做立方体大作战的游戏风靡整个Byteotia.这个游戏的规则是相当复杂的,所以我们只介绍他的简单规 则:给定玩家一个有2n个元素的栈,元素一个叠一个地放置.这些元素拥有n ...
 - C# 发起Get和Post请求
			
public class ApiHelper { //contentType application/json or application/xml public string HttpGet(str ...
 - NOIP2016 DAY2 T3 愤怒的小鸟
			
传送门 题目描述 Kiana 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于 (0,0)(0,0) 处,每次 Kiana 可以用它向第一象限发射一只红色的 ...