码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • AcWing 286. 选课,《算法竞赛进阶指南》


    286. 选课 - AcWing题库

    学校实行学分制。

    每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分。

    学校开设了 N 门的选修课程,每个学生可选课程的数量 M 是给定的。

    学生选修了这 M 门课并考核通过就能获得相应的学分。

    在选修课程中,有些课程可以直接选修,有些课程需要一定的基础知识,必须在选了其他的一些课程的基础上才能选修。

    例如《Windows程序设计》必须在选修了《Windows操作基础》之后才能选修。

    我们称《Windows操作基础》是《Windows程序设计》的先修课。

    每门课的直接先修课最多只有一门。

    两门课可能存在相同的先修课。

    你的任务是为自己确定一个选课方案,使得你能得到的学分最多,并且必须满足先修条件。

    假定课程之间不存在时间上的冲突。

    输入格式

    输入文件的第一行包括两个整数 N、M(中间用一个空格隔开)其中 1≤N≤300,1≤M≤N。

    接下来 N 行每行代表一门课,课号依次为 1,2,…,N

    每行有两个数(用一个空格隔开),第一个数为这门课先修课的课号(若不存在先修课则该项为 0),第二个数为这门课的学分。

    学分是不超过 10 的正整数。

    输出格式

    输出一个整数,表示学分总数。

    输入样例:
    1. 7 4
    2. 2 2
    3. 0 1
    4. 0 4
    5. 2 1
    6. 7 1
    7. 7 6
    8. 2 2
    输出样例:
    13

     解析:

    这道题的状态转移方程并不难,关键是注意体积从大到小遍历,因为这是一个分组背包问题

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include
    9. #include
    10. #include
    11. #include
    12. #include
    13. #include
    14. #include
    15. using namespace std;
    16. typedef long long LL;
    17. const int N = 305;
    18. vector<int>G[N];
    19. int n, m;
    20. int f[N][N], w[N];
    21. void dfs(int a) {
    22. for (int i = 0; i < G[a].size(); i++) {
    23. int p = G[a][i];
    24. dfs(p);
    25. for (int j = m-1; j > 0; j--) {
    26. for (int k = 1; k <= j; k++) {
    27. f[a][j] = max(f[a][j], f[a][j - k] + f[p][k]);
    28. }
    29. }
    30. }
    31. for (int i = m; i > 0; i--) {
    32. f[a][i] = f[a][i - 1] + w[a];
    33. }
    34. }
    35. int main() {
    36. scanf("%d%d", &n, &m);
    37. for (int i = 1, a; i <= n; i++) {
    38. scanf("%d%d", &a, &w[i]);
    39. G[a].push_back(i);
    40. }
    41. m++;
    42. dfs(0);
    43. cout << f[0][m] << endl;
    44. return 0;
    45. }

  • 相关阅读:
    基于SSM的超市订单管理系统
    租用服务器后需要注意什么呢
    力扣hot100——第1天:1两数之和、2两数相加、3无重复字符的最长子串
    (数据科学学习手札157)pandas新增case_when方法
    Vue前端项目安装及相关问题解决
    计算机毕业设计springboot+vue基本微信小程序的学习资料共享小程序
    css中关于fit-content尺寸的属性
    《web课程设计》用HTML CSS做一个简洁、漂亮的个人博客网站
    力扣刷题day50|739每日温度、496下一个更大元素 I
    第四篇章:运行时数据区——共享空间
  • 原文地址:https://blog.csdn.net/Landing_on_Mars/article/details/133528542
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号