这一周竟然都没好好码题目,不过至少把这题的树形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] 选课的更多相关文章

  1. 【树形dp】vijos P1180 选课

    题解: http://www.cppblog.com/rakerichard/articles/105004.html 惊了,讨论子树大小能否dp真鸡儿麻烦,按照上面那份题解,可以不用分这么多类,可以 ...

  2. vijos 1180 选课 树形DP

    描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了N(N<300)门的选修课程,每个学生可选课程的数量M是给定的.学生选修了这M门课并考核通过就能获得 ...

  3. 【树形动态规划】【CTSC1997】选课 解题报告

    CTSC1997-选课 描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了N(N<300)门的选修课程,每个学生可选课程的数量M是给定的.学生选修了这 ...

  4. [vijos P1083] 小白逛公园

    不知怎地竟有种错觉此题最近做过= =目测是类似的?那道题貌似是纯动归? 本来今晚想做两道题的,一道是本题,一道是P1653疯狂的方格取数或NOI08 Employee,看看现在的时间目测这个目标又达不 ...

  5. Vijos 1180 (树形DP+背包)

    题目链接: https://vijos.org/p/1180 题目大意:选课.只有根课选了才能选子课,给定选课数m, 问最大学分多少. 解题思路: 树形背包.cost=1. 且有个虚根0,取这个虚根也 ...

  6. 【BZOJ 1061】【Vijos 1825】【NOI 2008】志愿者招募

    http://www.lydsy.com/JudgeOnline/problem.php?id=1061 https://vijos.org/p/1825 直接上姜爷论文... #include< ...

  7. 从零开始学Python06作业思路:学生选课系统

    一,作业要求 选课系统: 管理员: 创建老师:姓名.性别.年龄.资产 创建课程:课程名称.上课时间.课时费.关联老师 学生:用户名.密码.性别.年龄.选课列表[].上课记录{课程1:[di,a,]} ...

  8. python之选课系统详解[功能未完善]

    作业需求 思路:1.先写出大体的类,比如学校类,学生类,课程类--   2.写出类里面大概的方法,比如学校类里面有创建讲师.创建班级-- 3.根据下面写出大致的代码,并实现其功能       遇到的困 ...

  9. vijos P1915 解方程 加强版

    背景 B酱为NOIP 2014出了一道有趣的题目, 可是在NOIP现场, B酱发现数据规模给错了, 他很伤心, 哭得很可怜..... 为了安慰可怜的B酱, vijos刻意挂出来了真实的题目! 描述 已 ...

随机推荐

  1. Retrieve失败解决办法一例

    错误:The service '/XRMServices/2011/OrganizationData.svc' cannot be activated due to an exception duri ...

  2. vlc播放yuv文件

    vlc.exe --demux rawvideo --rawvid-fps 25 --rawvid-width 480 --rawvid-height 272 --rawvid-chroma I420 ...

  3. WIFI驱动的移植 realtek 8188

    一般我们拿到的android源代码中wifi应用层部分是好的, 主要是wifi芯片的驱动要移植并添加进去. wifi驱动的移植, 以realtek的8188etv为例到官网下载相应的驱动, 解压后可以 ...

  4. zigbee学习之路(八):定时器1(中断)

    一.前言 通过上次的实验,我们已经学会了定时器3的中断方式,这次,我们来看看定时器1通过中断怎么控制. 二.原理分析 定时器1的初始化跟前面提到的一样,也是要配置寄存器T1CTL,还要进行开中断的操作 ...

  5. Animation小问题整理

    1.在动画播放中改变层级内容的名字,不会造成动画内容映射的改变. 2.Animator动画剪辑层级没问题,但是不播放 检查是否Mask损坏,FBX文件的Animations选项下面有个Mask.Uni ...

  6. react native 学习资料汇总

    http://www.ejiakt.com/album/show/252 http://www.cocoachina.com/ios/20150408/11513.html http://www.os ...

  7. ASP.NET MVC view引入命名空间

    两种方式:1,在cshtml中引入@using Admin.Models 2,在 Views 文件夹中的 Web.config 文件中添加引用如: <pages pageBaseType=&qu ...

  8. iOS开发数据库篇—SQLite的应用

    iOS开发数据库篇—SQLite的应用 一.简单说明 在iOS中使用SQLite3,首先要添加库文件libsqlite3.dylib和导入主头文件. 导入头文件,可以使用库中的函数(是纯C语言的) 二 ...

  9. createjs 更新

    使用0.8.2版本 不在需要单独 引入 MovieClip 文件了

  10. 轻松解决Linux安装Eclipse方法

    随着Linux的发展,很多人开始学习Linux系统,你了解Linux系统么?你是Linux系统的应用者么?本文为你详细介绍Linux安装Eclipse,为你在学习Linux安装Eclipse时起一定的 ...