[vijos P1180] 选课
这一周竟然都没好好码题目,不过至少把这题的树形DP给摸了个大概。吐槽一下自己,递归已经基本不会用了…QAQ!按老师的话来说“太危险了!”
此题用到多叉树转二叉树,左孩子是真正意义的孩子(先修完自己才能修左孩子),右孩子是同辈。着实是一个好方法,同时我也不知道多叉树该怎么写,多套个循环扫?Anyway转二叉搞会了。
f[x,y]表示,以x为根节点的子树,上y节课可以修到的最大学分。(没看解题前我的思路是,f[x,y]表示从1~x中选y节课可以得到的最大学分QAQ错错错)
最后犯的小错误是在DP子函数里面,for k:=0 to num-1,一开始把0写成1了,所以导致所有的答案都偏小一些。写成1的话,就没把c[root]+f[r[root],num-1]的情况给算进去。
DP就是精简,但是递推方程就是难想,想象力得多丰富才想得到,出题者又得多厉害出得出这种题。
program vijos_p1180;
var f:Array[..,..] of longint;
l,r,c,p:array[..] of integer;
n,m,i,d,t,tt,root,ans:integer;
flag:boolean;
function max(a,b:integer):integer;
begin
if a>b then exit(a) else exit(b);
end;
function dp(root,num:integer):integer;
var k,t:integer;
begin
t:=;
if (root=) or (num=) then exit();
if f[root,num]> then exit(f[root,num]);
f[root,num]:=dp(r[root],num);
if (num=) and (c[root]>f[root,num]) then f[root,num]:=c[root];
for k:= to num- do
begin
t:=dp(l[root],k)+dp(r[root],num-k-)+c[root];
if t>f[root,num] then f[root,num]:=t;
end;
dp:=f[root,num];
end; begin
readln(n,m);
flag:=false;
for i:= to n do
begin
readln(d,c[i]);
p[i]:=d;
if (d=) and (flag=false) then
begin
flag:=true;
root:=i;
end;
if l[d]= then l[d]:=i
else begin
t:=l[d];
while r[t]<> do
t:=r[t];
r[t]:=i;
end;
end;
ans:=dp(root,m);
writeln(ans);
end.
选课
测试数据 #0: Accepted, time = 0 ms, mem = 1096 KiB, score = 20
测试数据 #1: Accepted, time = 15 ms, mem = 1092 KiB, score = 20
测试数据 #2: Accepted, time = 15 ms, mem = 1092 KiB, score = 20
测试数据 #3: Accepted, time = 46 ms, mem = 1092 KiB, score = 20
测试数据 #4: Accepted, time = 62 ms, mem = 1096 KiB, score = 20
P.S. 为什么别人都是0ms难道我写的有什么问题么,看了别人代码感觉我多叉转二叉写麻烦了,不过我完全按照自己想象力去写的。
P.S.2 此题也是tyvj 1051 选课。tyvj感觉好久没人维护了呀…毕竟是自己最开始用的oj感情还是深的T^T!
[vijos P1180] 选课的更多相关文章
- 【树形dp】vijos P1180 选课
题解: http://www.cppblog.com/rakerichard/articles/105004.html 惊了,讨论子树大小能否dp真鸡儿麻烦,按照上面那份题解,可以不用分这么多类,可以 ...
- vijos 1180 选课 树形DP
描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了N(N<300)门的选修课程,每个学生可选课程的数量M是给定的.学生选修了这M门课并考核通过就能获得 ...
- 【树形动态规划】【CTSC1997】选课 解题报告
CTSC1997-选课 描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了N(N<300)门的选修课程,每个学生可选课程的数量M是给定的.学生选修了这 ...
- [vijos P1083] 小白逛公园
不知怎地竟有种错觉此题最近做过= =目测是类似的?那道题貌似是纯动归? 本来今晚想做两道题的,一道是本题,一道是P1653疯狂的方格取数或NOI08 Employee,看看现在的时间目测这个目标又达不 ...
- Vijos 1180 (树形DP+背包)
题目链接: https://vijos.org/p/1180 题目大意:选课.只有根课选了才能选子课,给定选课数m, 问最大学分多少. 解题思路: 树形背包.cost=1. 且有个虚根0,取这个虚根也 ...
- 【BZOJ 1061】【Vijos 1825】【NOI 2008】志愿者招募
http://www.lydsy.com/JudgeOnline/problem.php?id=1061 https://vijos.org/p/1825 直接上姜爷论文... #include< ...
- 从零开始学Python06作业思路:学生选课系统
一,作业要求 选课系统: 管理员: 创建老师:姓名.性别.年龄.资产 创建课程:课程名称.上课时间.课时费.关联老师 学生:用户名.密码.性别.年龄.选课列表[].上课记录{课程1:[di,a,]} ...
- python之选课系统详解[功能未完善]
作业需求 思路:1.先写出大体的类,比如学校类,学生类,课程类-- 2.写出类里面大概的方法,比如学校类里面有创建讲师.创建班级-- 3.根据下面写出大致的代码,并实现其功能 遇到的困 ...
- vijos P1915 解方程 加强版
背景 B酱为NOIP 2014出了一道有趣的题目, 可是在NOIP现场, B酱发现数据规模给错了, 他很伤心, 哭得很可怜..... 为了安慰可怜的B酱, vijos刻意挂出来了真实的题目! 描述 已 ...
随机推荐
- bug检测报告---礼物挑选小工具--飞天小女警
飞天小女警----礼物挑选小工具 测试产品链接:http://123.207.159.79:8088/giving_gifts/ 发布在作者的博客里面:http://www.cnblogs.com/s ...
- MongoDB数据库基本用法
show dbs:显示数据库列表 show collections:显示当前数据库中的集合(类似关系数据库中的表) show users:显示用户 use <db name>:切换当前 ...
- Maven打包pom里面配置exclude 排除掉环境相关的配置文件
Maven打包pom里面配置exclude 排除掉环境相关的配置文件 有几种方式:1. 打包时,指定环境参数把环境的配置文件复制过去2. 不打包所有的环境相关的配置文件,直接由运维的人维护 可以在上传 ...
- jQuery全选/反选checkbox
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- apache 一域名下多个二级域名如何做设置?
域名最新配置说明官网:http://apache.chinahtml.com/ 目的是在根目录,不同子域名可以访问不同目录下的网站: 第一步:打开 C:\Windows\System32\driver ...
- [问题2014A09] 复旦高等代数 I(14级)每周一题(第十一教学周)
[问题2014A09] 设 \(A,B\) 分别是 \(3\times 2\), \(2\times 3\) 矩阵且满足\[AB=\begin{bmatrix} 8 & 2 & -2 ...
- Dialog , ProgressDialog , PopWindow 区别
本质区别: Dialog:非阻塞对话框,弹出对话框时时,后台还可以做事情,点击背景时,对话框消失 ProgressDialog:带有圆形进度或者条形进度的对话框,一般结合handler使用.任务完成后 ...
- IntelliJ IDEA中使用综合使用Maven和Struts2
在Intellij IDEA中手动使用Maven创建Web项目并引入Struts2 创建一个新的Maven项目 建好项目之后点击左下角的enable auto import 项目部署 在Moudule ...
- 类似\u4e0b\u6ce8\u903e\u65f6解码
HttpUtility.UrlDecode("\u4e0b\u6ce8\u903e\u65f6"); HttpUtility.UrlDecode("\\u5c1a\\u6 ...
- 使用Sonatype Nexus搭建Maven私服后如何添加第三方JAR包?
Sonatype Nexus简介 登录Nexus后,点击右侧的“Repositories”,显示当前Nexus所管理的Repository: 默认情况下Nexus为我们创建了以下主要的Reposito ...