博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Luogu 2014】选课
阅读量:6885 次
发布时间:2019-06-27

本文共 1021 字,大约阅读时间需要 3 分钟。

【题目链接】

【调试出错】

写了第一遍怎么调都不过,气得想摔键盘。

冷静去上了两节文化课回来又码了一遍,然后就一遍过了。

【题解大意】

这个题目给的是森林,我们构建虚拟节点0使之变成一棵树。

f[x,t]表示以x为根的子树中选择t门课程能获得的最高学分。设x的子节点集合为son[x]。

【code】

#include
using namespace std;const int N = 306;vector
son[N];int n, m, f[N][N], s[N];void dp(int x) { f[x][0] = 0; for (unsigned int i = 0; i < son[x].size(); i++) { int y = son[x][i]; dp(y); for (int t = m; t >= 0; t--) for (int j = t; j >= 0; j--) if (t - j >= 0) f[x][t] = max(f[x][t], f[x][t-j] + f[y][j]); } if (x) for(int t = m; t; t--) f[x][t] = f[x][t-1] + s[x];}int main() { cin >> n >> m; for (int i = 1; i <= n; i++) { int x; cin >> x >> s[i]; son[x].push_back(i); } memset(f, 0xcf, sizeof(f)); dp(0); cout << f[0][m] << endl; return 0;}
View Code

 【题目链接】传送门

【题解大意】

输出方案!

一般dp怎么输出方案呢。

用与dp状态大小相同的数组记录出当前的最优值是由什么转移而来的,通过一次递归沿着记录的状态来源回到最初状态。

【code】

 

转载于:https://www.cnblogs.com/ve-2021/p/10813568.html

你可能感兴趣的文章
Scala函数的定义的几种写法
查看>>
【iphone应用开发】iphone 应用开发之二:UITextView控件的详细讲解
查看>>
HTML5 API摘要
查看>>
去除滚动条的可滚动效果
查看>>
注入攻击 初见解
查看>>
JProfiler_SN_8_x.txt
查看>>
IntelliJ IDEA 社区版没有 Spring Initializr
查看>>
(C++)从本机获取WMI数据.
查看>>
【Practical API Design学习笔记】修复奥德修斯
查看>>
CentOS镜像使用帮助
查看>>
Spring AOP 实现原理
查看>>
4.5.2 libxml/tree.h file not found解决办法
查看>>
Java反射机制class类
查看>>
android使用proguard混淆生成jar包
查看>>
疯狂Activiti6.0连载(12)DMN规范概述
查看>>
3-Elasticsearch查询API
查看>>
RemotelyAnywhere安装使用指南
查看>>
PHP中利用ICONV转化字符串编码出错【DETECTED AN ILLEGAL CHARAC...
查看>>
display table 标签
查看>>
mysql 日志维护
查看>>