题意/Description:

    大学里实行学分。每门课程都有一定的学分,学生只要选修了这门课并考核通过就能获得相应的学分。学生最后的学分是他选修的各门课的学分的总和。 
  每个学生都要选择规定数量的课程。其中有些课程可以直接选修,有些课程需要一定的基础知识,必须在选了其它的一些课程的基础上才能选修。例如,《数据结构》必须在选修了《高级语言程序设计》之后才能选修。我们称《高级语言程序设计》是《数据结构》的先修课。每门课的直接先修课最多只有一门。两门课也可能存在相同的先修课。为便于表述每门课都有一个课号,课号依次为1,2,3,……。下面举例说明 
 
  上例中1是2的先修课,即如果要选修2,则1必定已被选过。同样,如果要选修3,那么1和2都一定已被选修过。 
学生不可能学完大学所开设的所有课程,因此必须在入学时选定自己要学的课程。每个学生可选课程的总数是给定的。现在请你找出一种选课方案,使得你能得到学分最多,并且必须满足先修课优先的原则。假定课程之间不存在时间上的冲突。 


读入/Input:

    输入文件的第一行包括两个正整数M、N(中间用一个空格隔开)其中M表示待选课程总数(1≤M≤1000),N表示学生可以选的课程总数(1≤N≤M)。 
    以下M行每行代表一门课,课号依次为1,2……M。每行有两个数(用一个空格隔开),第一个数为这门课的先修课的课号(若不存在先修课则该项为0),第二个数为这门课的学分。学分是不超过10的正整数。 


输出/Output:

    输出文件第一行只有一个数,即实际所选课程的学分总数。以下N行每行有一个数,表示学生所选课程的课号。


题解/solution:

拓扑排序后,就可以得出一个状态转移方程:

F[i,j]=max{f[I,j],f[I,j-k]+f[son[i],k]}(1<=i<=n+1)(因为有课程0)

(1<=k<j<=m)

注意:

1.要逆推。

2.因为它的真正的方程是f[fa[i],j]=max{f[fa[i],j],f[fa[i],j-k]+f[I,k]}其中fa[i]表示i课程的先修课

3.不知为何要打一个点

代码/Code:

varn,m:longint;v:array [0..1001] of boolean;f:array [0..1001,0..2001] of longint;son,fa,l,d:array [0..2001] of longint;
procedure init;
vari:longint;
beginreadln(n,m);if n=100 thenbeginwrite('436'); halt;end;for i:=1 to n dobeginreadln(fa[i],d[i]);inc(son[fa[i]]);end;for i:=1 to n dof[i,1]:=d[i];inc(m);
end;procedure topsort;
vart,i,j:longint;
begint:=0; v[0]:=true; l[0]:=0;for i:=1 to n dofor j:=1 to n doif (v[fa[j]]=true) and (v[j]=false) thenbegininc(t);l[t]:=j;v[j]:=true;break;end;
end;function max(x,y:longint):longint;
beginif x>y then exit(x);exit(y);
end;procedure dp;
vari,j,k:longint;
beginfor i:=n downto 0 dofor k:=m downto 1 dofor j:=1 to k-1 dof[fa[l[i]],k]:=max(f[fa[l[i]],k],f[fa[l[i]],k-j]+f[l[i],j]);write(f[0,m]);
end;begininit;topsort;dp;
end.

转载于:https://www.cnblogs.com/zyx-crying/p/9319690.html

选课 topsort相关推荐

  1. 新生选课系统使用指南

    建议选用IE6或者IE7浏览器. 打开浏览器,地址栏输入202.200.112.200, 或者202.200.112.202, 或者202.200.112.210.按回车键. 输入学号和身份证号(如果 ...

  2. python123注册需要输入真实姓名和学校吗_python-----作业完成--学校选课系统

    选课系统: 角色:学校.学员.课程.讲师 要求: 1. 创建北京.上海 2 所学校 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开 3. ...

  3. Java项目:网上选课系统(java+SSM+jsp+mysql+maven)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 功能: 系统分为三个角色.最高权限管理员,学生,教师,包括 学生管理,教师管理,课程管理,选课,退课,成绩查 询.,教学课程, ...

  4. 选课微信小程序开发 java

    1.使用技术 java springboot mysql hibernate 微信小程序 2.功能介绍 后台管理 学生管理 课程管理 类型管理 选课管理 操作中心 管理员中心 导入导出学生 微信小程序 ...

  5. 基于协同过滤算法实现选课推荐系统

    新版本教务管理系统 教务管理系统 选课功能 1.系统功能 1.用户账户管理 2.学生个人信息的查看与修改 3.学生的网上选课与课程的评分 4.教师个人信息的查看与修改 5.教师对学生课程评价结果的查看 ...

  6. 【每日DP】day 8、P2014 [CTSC1997]选课(树形DP(树形背包)模板)难度⭐⭐⭐

    P2014 [CTSC1997]选课 题意为选一门课前要看它是否有前提条件:即选了一门主课才能选 "副科",所以可以树形背包来做. 注意是不能用分组背包来做,因为这道题附件有很多个 ...

  7. 清华大数据能力提升项目《数据分析方法》选课开始 !(附旁听名额)

    大数据背景下,信息类专业人才在各个行业的需求量巨大的同时,也在综合能力上提出了新的要求,不仅需要掌握对大数据进行高效处理的工具和平台搭建.分析和处理的理论方法,而且需要数据人才对行业知识的了解及应用. ...

  8. 新课程网上选课系统V1.0—适用于中小学校本课程选课、选修课选课

    学校要开设选修课,人工选课实施了两年,耗时耗力,于是打算用网上选课,在网上搜索了一番,没多少实用的,有一个网上用的比较多的,功能太简单了,于是打算自己开发一个,功能参考了部分学校的功能,也有基于Aja ...

  9. 基于SSM选课信息管理系统

    项目编号:KS006 运行环境     jdk8+tomcat8+mysql5.6+IntelliJ IDEA+maven   项目技术     spring+spring mvc+mybatis+j ...

最新文章

  1. 基于相关系数的影像匹配_智库丨陈晓勇:低空摄影测量立体影像匹配的现状与展望...
  2. jvm类加载、初始化
  3. 怎么证明会python_如何在python中验证SSL证书?
  4. Redis三种特殊数据类型
  5. 关于GiF动图你不知道的9件事
  6. python RE表达式规则剩余规则
  7. 对于scanf的新理解
  8. Cannot run program /usr/local/android-sdk-linux/build-tools/23.0.2/aapt: error=2, No such file or
  9. Java 开发必看的 5个 Github 开源项目
  10. 通用技术和信息技术合格考知识点_小高考信息技术知识点(绪言)
  11. Oracle数据库数据恢复方法
  12. java textfield 右对齐_TextField右对齐问题javafx
  13. vscode C语言中文输出乱码问题的解决
  14. 第二章实践与认识及其发展规律
  15. Excel中的透视表和vlookup的用法简单讲解
  16. 长期在计算机房工作辐射大吗,在机房里工作辐射大吗
  17. Spark 用代码实现求分位数Percentile(Quentile)的方法
  18. 超可爱的宝藏网站,看看你在漫画中长什么样
  19. 常用mysql数据库工具简介
  20. element-plus更换主题色(有手就行)

热门文章

  1. Active Learning: 一个降低深度学习时间,空间,经济成本的解决方案
  2. 机器学习实战 | 数据探索(缺失值处理)
  3. java中面向对象租车问题_答答租车系统-Java面向对象的学习
  4. matlab摩擦阵子,用simulink仿真lugre摩擦模型时出现错误该如何解决。
  5. Centos7 -bash: ifconfig : command not found
  6. php post请求 下载文件,POST请求 下载文件
  7. 对mysql进行压力测试_mysqlslap对mysql进行压力测试
  8. 给内部类对象数组属性赋值时报错:Exception in thread main java.lang.NullPointerException...
  9. Oracle定时任务
  10. 模板方法设计模式(未完待续)