9018第1205题;

题目:

题目描述:学校实行学分制。每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分。学校开设了N(N< 300)门的选修课程,每个学生可选课程的数量M是给定的。学生选修了这M门课并考核通过就能获得相应的学分。在选修课程中,有些课程可以直接选修,有些课程需要一定的基础知识,必须在选了其它的一些课程的基础上才能选修。例如《Frontpage》必须在选修了《Windows操作基础》之后才能选修。我们称《Windows操作基础》是《Frontpage》的先修课。每门课的直接先修课最多只有一门。两门课也可能存在相同的先修课。每门课都有一个课号,依次为1,2,3,…。 例如: 

图中2是7的先修课,7是5、6的先修课。如果要选5,那么2和7都一定已被选修过。
你的任务是为自己确定一个选课方案,使得你能得到的学分最多,并且必须满足先修课优先的原则。假定课程之间不存在时间上的冲突。

输入

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

输出

输出文件只有一个数,实际所选课程的学分总数。

样例输入

7 4
2 2
0 1
0 4
2 1
7 1
7 6
2 2

样例输出

13
解题方法    建立有向图,代替树.........树形动归代码  

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
using namespace std;
const int MAX=301;
struct Edge{
int v,w,next;
Edge(){}
Edge(int V,int W,int NEXT):v(V),w(W),next(NEXT){}
} edge[MAX*2]; //边表
int dp[MAX][MAX];
int head[MAX],size=0;
int n,m;
void Insert(int u,int v,int w){
edge[size]=Edge(v,w,head[u]);
head[u]=size++;
}
void init(){
cin>>n>>m;
int v,w;
for(int i=0;i<=n;i++)//出错,不是从一开始

head[i]=-1;
for(int i=1;i<=n;i++){
cin>>v>>w;
Insert(i,v,w);
Insert(v,i,w);
}
}
int dfs(int u,int fa){
int sum=0;
for (int i=head[u];i!=-1;i=edge[i].next){
int v=edge[i].v;
int w=edge[i].w;
if(v == fa)continue;
int t=dfs(v,u);
sum+=t+1;
for (int j=min(sum,m);j>=0;j--){
for (int k=0;k<=j-1;k++)
dp[u][j]=max(dp[u][j],dp[u][k]+dp[v][j-k-1]+w);
}
}
return sum;
}
int main(){
init();
dfs(0,-1);//出错,因为有的课程没有先修课,所以要从零开始
// for(int i=1;i<=n;i++)
// cout<<head[i]<<" ";
cout<<dp[0][m];//出错,这道题设置了零代表虚拟点(根节点),所以从零开始
return 0;
}

反思

做题不着急,要先想好思路,该怎么做,不要想一步写一步

  做题要谨慎,细微处见功夫

   要懂得怎样找错,分析.............

 

转载于:https://www.cnblogs.com/linzeli/p/6617291.html

[TYVJ]选课lzl初一相关推荐

  1. TYVJ P1051 选课 Label:多叉转二叉树形dp(虐心♥)

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

  2. java学生作业带选课管理系统ssh

    1.管理员具有对学校课程信息,教师信息,学生信息增删改查的权限 (1)可以录入学校所开课程,学生信息,教师信息: (2)可以对教师的开课信息进行增加,删除,修改,查询: (3)可以对学生的选课信息进行 ...

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

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

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

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

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

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

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

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

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

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

  8. 火出圈!河南大学教授毕业典礼金句频现:躺平得了初一,躺平不到十五!

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文来源:河南大学官网.抖音视频.华西都市报 "纯真辟油腻 ...

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

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

最新文章

  1. 关于SQL Server 2017中使用json传参时解析遇到的多层解析问题
  2. Objective-C method及相关方法分析
  3. SAP Commerce Cloud Spartacus UI 的 ActionClass 数据结构设计
  4. android unzip file,Unzip File in Android Assets
  5. Qt与QML的枚举绑定(C++枚举)
  6. 需求分析解决方案文案,展示图文结合的文案的视觉感。运用屏幕摄影师Snaglt实现屏幕图像文本捕获与编辑,为技术文案的编写提供素材支持。
  7. 在html css中加粗显示,HTML和CSS实现字体加粗的三种方法
  8. vue 微信支付的坑_微信支付踩坑
  9. 【C语言】奥运参赛国出场次序
  10. Flex读取Excel
  11. 将数字转化为千分位形式
  12. (转)美国金融科技监管框架
  13. PHP手机版源码下载分期系统源码Thinkphp内核开发集成支付,短信功能,征信对接
  14. 字软元件和位软元件的区别
  15. 数字图像处理——图像退化(大气湍流模型与运动模糊模型)与图像复原(逆滤波与维纳滤波)
  16. 2022-2028年中国体外诊断行业市场发展现状及竞争格局预测报告
  17. 强流量做强变现,抖音电商独立能如愿吗?
  18. 为何我国这么大力推进5G发展?
  19. Unity手柄按键映射
  20. 怎样防范vbs脚本病毒

热门文章

  1. OCP 11G 051题库解析汇总链接
  2. Macbook Tools
  3. 解决KETTLE9 连接MYSQL 8 Error connecting to database: (using class org.gjt.mm.mysql.Driver)
  4. QT: Linux下-错误提示cannot find -lGL
  5. linux篇之安装MySQL及远程连接
  6. 黑马程序员---java算法实现输出任意奇数维数独
  7. 图解MySQL系列(2)-SQL实战研究InnoDB架构设计
  8. mybatis系列一:入门篇
  9. 论文笔记:Mind the Gap An Experimental Evaluation of Imputation ofMissing Values Techniques in TimeSeries
  10. redis连接与关闭