首页 > 其他分享 >选课

选课

时间:2024-02-16 22:22:21浏览次数:23  
标签:子树 选课 int dfs 背包 1005 节点

选课

传送门
树型背包,结合树型dp(dfs)和背包dp。

code
#include<bits/stdc++.h>
using namespace std;
int n,m,f[1005][1005],k[1005];
vector<int> son[1005];

int dfs(int u)
{
	int p=1;
	f[u][1]=k[u];
	for(int v:son[u])
	{
		int siz=dfs(v);
		for(int i=min(m+1,p);i;i--)
		 for(int j=1;j<=siz&&i+j<=m+1;j++)
			f[u][i+j]=max(f[u][i+j],f[u][i]+f[v][j]);
		p+=siz;
	}
	return p;
}
int main()
{
	scanf("%d%d",&n,&m);
	int x;
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d",&x,&k[i]);
		son[x].push_back(i);
	}
	dfs(0);
	printf("%d",f[0][m+1]);
	
	return 0;
}

oi-wiki

  1. 建树:
    son[x].push_back(i);可将所有课看成森林,设定一个“0号课”,将森林连城一棵大树,根节点为0.

  2. 状态转移方程:
    f[u][i+j]=max(f[u][i+j],f[u][i]+f[v][j]); , 类比背包来看,\(i+j\)看成当前剩余容量,将大小为\(i+j\)的总容量分给子树\(v\)和根节点\(u\)剩下的子树,遍历所有分割情况,对于子树\(v\) ,由于dfs从叶子到根回溯,可保证\(f[v][j]\) 一定已经求出,对于根节点\(u\) 剩下的子树,\(i\) 倒序循环类比01背包,确保不会重复选择\(v\)节点,则\(f[u][i]\)只会记录未选\(v\)时的状态。因此\(f[u][i+j]\)被更新时\(f[v][j]\)已经确定,\(f[u][i]\)在遍历过程中也会被确定。(可参考分组背包)。

  3. 初始化:
    f[u][1]=k[u];,\(f[u][1]\)(节点原有的值)可看成初始化,由于\(i+j\)从2开始遍历,相当于\(f[u][i]\)中一定会包含\(f[u][1]\),当dfs到叶子也会被更新为\(f[u][1]\),也算初始值吧。

标签:子树,选课,int,dfs,背包,1005,节点
From: https://www.cnblogs.com/ppllxx/p/18017572

相关文章

  • 选课 题解
    题目描述大学里实行学分。每门课程都有一定的学分,学生只要选修了这门课并考核通过就能获得相应的学分。学生最后的学分是他选修的各门课的学分的总和。每个学生都要选择规定数量的课程。其中有些课程可以直接选修,有些课程需要一定的基础知识,必须在选了其它的一些课程的基础上才......
  • 基于Java的高校学生综合测评管理系统的设计与实现(亮点:选课、课程评分、各类活动申请
    高校学生综合测评管理系统一、前言二、我的优势2.1自己的网站2.2自己的小程序(小蔡coding)2.3有保障的售后2.4福利三、开发环境与技术3.1MySQL数据库3.2Vue前端技术3.3SpringBoot框架3.4微信小程序四、功能设计4.1主要功能描述五、系统实现5.1前端界面实现5.1.1系统首页......
  • springcloud学生选课系统
    开发技术:jdk1.8,mysql5.7,idea,nodejs,vscodespringcloudspringbootmybatisvueelementui功能介绍:学生:登录,统计分析,选课(查看课程及选择),我的成绩老师:登录,统计分析,课程管理:课程信息维护成绩管理:成绩信息发布管理员:登录统计分析:统计成绩学生管理:学生增删改查老师管理:老师增删改查班级管......
  • 2023年11月14号(学生选课管理系统源代码)
    今天将本周一的代码进行了bug修改和完善,下面是源代码四张数据库的内容与命名:主页面:<%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>选课管理系统</title></head><body><tablebgcolor=&......
  • 11.13(周一)总结——选课系统个人总结
    今天做的选题系统主要是实现多表的增删改查,但是选课系统本身我目前无法实现。我在三个表的构建中有一个小时思路非常混乱,以后应该先理出角色和整体的思路再开始写,还有要注意文件的命名,因为如果一旦出现错误复盘是非常费力的。还有就是敲代码的速度太慢,无法适应期末的代码量......
  • Java+Jsp+MySQL高校选课系统设计与实现(附源码下载地址)
    @目录01源码下载02系统概述03开发工具及技术选型04运行环境05用户分析06功能分析07数据库设计08项目工程结构及说明09部分功能展示及源码9.1管理员端--首页9.2管理员端--专业管理9.3管理员--课程管理9.4管理员端--统计信息9.5普通用户端--基本信息9.6普通用户端--......
  • 基于Java的高校学生综合测评管理系统的设计与实现(亮点:选课、课程评分、各类活动申请
    (高校学生综合测评管理系统)二、我的优势2.1自己的网站网站上传的项目均为博主自己收集和开发的,质量都可以得到保障,适合自己懂一点程序开发的同学使用!2.2自己的小程序(小蔡coding)<imgsrc="https://img-blog.csdnimg.cn/img_convert/3df3eff92652bb0959df5e3d738d05c9.png"......
  • 基于Java的大学生选修选课系统设计与实现(亮点:多角色、贴近现实的选课流程、好看的系统
    大学生选修选课系统一、前言二、我的优势2.1自己的网站2.2自己的小程序(小蔡coding)2.3有保障的售后2.4福利三、开发环境与技术3.1MySQL数据库3.2Vue前端技术3.3SpringBoot框架3.4微信小程序四、功能设计4.1主要功能描述五、系统实现5.1管理员端功能5.1.1学生管理5.1.2......
  • 【LuoGu】2014 选课——树上DP
    [CTSC1997]选课题目描述在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习。现在有\(N\)门功课,每门课有个学分,每门课有一门或没有直接先修课(若课程a是课程b的先修课即只有......
  • 基于uniapp的学生(选课)成绩小程序
    博主主页:猫头鹰源码博主简介:Java领域优质创作者、博客专家、公司架构师、全网粉丝5万+、专注Java技术领域和毕业设计项目实战主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询文末联系获取项目介绍: 本系统2022年4月创作完成,该系统包含小程序端和......