题面

Bzoj

洛谷

题解

这种求比值最大就是$0/1$分数规划的一般模型。

这里用二分法来求解最大比值,接着考虑如何$check$,这里很明显可以想到用树形背包$check$,但是时间复杂度要优化成$O(n^2)$的,可以参考之前写的这篇博客

#include <cstdio>
#include <algorithm>
using std::min;
using std::max; const int N = 3e3 + 10, inf = 1e9 + 7;
const double eps = 1e-5;
int n, K, s[N], p[N], son[N][N], dfn[N], time, nx[N];
int from[N], to[N], nxt[N], cnt;//Edges
double f[N][N], d[N]; inline void addEdge (int u, int v) {
to[++cnt] = v, nxt[cnt] = from[u], from[u] = cnt;
} inline void upt(double &a, double b) {
if (a < b) a = b;
} void dfs (int u) {
dfn[u] = time++;
for (int i = from[u]; i; i = nxt[i]) dfs(to[i]);
nx[dfn[u]] = time;
} inline bool check (double k) {
for (int i = 1; i <= n; ++i)
d[dfn[i]] = p[i] - k * s[i];
for (int i = 1; i <= n + 1; ++i)
for (int j = 0; j <= K; ++j)
f[i][j] = -inf;
for (int i = 0; i <= n; ++i)
for (int j = 0; j <= min(i, K); ++j) {
upt(f[i + 1][j + 1], f[i][j] + d[i]);
upt(f[nx[i]][j], f[i][j]);
}
return f[n + 1][K] >= eps;
} int main () {
scanf("%d%d", &K, &n); ++K;
for (int i = 1, fa; i <= n; ++i) {
scanf("%d%d%d", s + i, p + i, &fa);
addEdge(fa, i);
}
dfs(0);
double l = 0, r = 10000, ans;
while (r - l >= eps) {
double mid = (l + r) * 0.5;
if (check(mid)) ans = mid, l = mid + eps;
else r = mid - eps;
}
printf ("%.3lf\n", ans);
return 0;
}

Bzoj4753/洛谷P4432 [JSOI2016]最佳团体(0/1分数规划+树形DP)的更多相关文章

  1. LUOGU P4322 [JSOI2016]最佳团体(0/1分数规划+树形背包)

    传送门 解题思路 一道0/1分数规划+树上背包,两个应该都挺裸的,话说我常数为何如此之大..不吸氧洛谷过不了啊. 代码 #include<iostream> #include<cst ...

  2. bzoj 4753 [Jsoi2016]最佳团体——0/1分数规划

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4753 0/1分数规划裸题. #include<iostream> #includ ...

  3. BZOJ 4753 [Jsoi2016]最佳团体 | 树上背包 分数规划

    BZOJ 4753 [Jsoi2016]最佳团体 | 树上背包 分数规划 又是一道卡精度卡得我头皮发麻的题-- 题面(--蜜汁改编版) YL大哥是24OI的大哥,有一天,他想要从\(N\)个候选人中选 ...

  4. 洛谷$P4322\ [JSOI2016]$最佳团体 二分+$dp$

    正解:二分+$dp$ 解题报告: 传送门$QwQ$ 这题长得好套路嗷,,,就一看就看出来是个$01$分数规划+树形$dp$嘛$QwQ$. 考虑现在二分的值为$mid$,若$mid\leq as$,则有 ...

  5. Bzoj1486/洛谷P3199 最小圈(0/1分数规划+spfa)/(动态规划+结论)

    题面 Bzoj 洛谷 题解(0/1分数规划+spfa) 考虑\(0/1\)分数规划,设当前枚举到的答案为\(ans\) 则我们要使(其中\(\forall b_i=1\)) \[ \frac{\sum ...

  6. bzoj 4753: [Jsoi2016]最佳团体【01分数规划+二分+树上背包】

    01分数规划,二分答案然后把判别式变成Σp[i]-Σs[i]*mid>=0,然后树上背包判断,设f[i][j]为在i点子树里选j个的最大收益,随便背包一下就好 最丧病的是神卡常--转移的时候要另 ...

  7. BZOJ 4753 [Jsoi2016]最佳团体 ——01分数规划 树形DP

    要求比值最大,当然用分数规划. 二分答案,转化为选取一个最大的联通块使得它们的和大于0 然后我们直接DP. 复杂度$O(n^2\log {n})$ #include <map> #incl ...

  8. 洛谷AT2046 Namori(思维,基环树,树形DP)

    洛谷题目传送门 神仙思维题还是要写点东西才好. 树 每次操作把相邻且同色的点反色,直接这样思考会发现状态有很强的后效性,没办法考虑转移. 因为树是二分图,所以我们转化模型:在树的奇数层的所有点上都有一 ...

  9. 分数规划模板(洛谷P4377 [USACO18OPEN]Talent Show)(分数规划,二分答案,背包)

    分数规划是这样一个东西: 给定若干元素,每个元素有两个属性值\(a_i,b_i\),在满足题目要求的某些限制下选择若干元素并求出\(\frac{\sum a}{\sum b}\)的最大值. 如果没有限 ...

随机推荐

  1. vijos 1057 盖房子 简单DP

    描述 永恒の灵魂最近得到了面积为n*m的一大块土地(高兴ING^_^),他想在这块土地上建造一所房子,这个房子必须是正方形的. 但是,这块土地并非十全十美,上面有很多不平坦的地方(也可以叫瑕疵).这些 ...

  2. linux时区修定转

    https://blog.csdn.net/feng12345zi/article/details/80348501

  3. 前端表单序列化为json串,以及构造json数组、json串

    var parm={ username:"zhangsan", age:24, email:"352400260@qq.com" }; console.log( ...

  4. 用一个时钟在FPGA中计算直方图

    直方图对数字数据的分析通常是一种有用的工具.不过,要从一个直方图获得可靠的结果,必须获得大量数据,通常是要10万到100万个点.如果需要分析一个ADC的数字输出,可以采用一片FPGA(图1). 图中显 ...

  5. 【hdu5381】维护区间内所有子区间的gcd之和-线段树

    题意:给定n个数,m个询问,每次询问一个区间内所有连续子区间的gcd的和.n,m<=10^5 题解: 这题和之前比赛的一题很像.我们从小到大枚举r,固定右端点枚举左端点,维护的区间最多只有log ...

  6. shell 给未定义的变量设定默认值 ${parameter:-word}

    参考: [ Unix & Linux ] Shell Demo $echo ${JENKINS_VERSION:-2.7.4} 2.7.4 $JENKINS_VERSION=2.99 $ech ...

  7. 当你启动Redis的时候,Redis做了什么

    直奔主题,当启动Redis的时候,Redis执行了哪些操作? 假设Redis安装在了/usr/local/目录下,那么启动Redis是通过执行/usr/local/bin/redis-server - ...

  8. 每个 Java 开发者都应该知道的 5 个注解

    自 JDK5 推出以来,注解已成为Java生态系统不可缺少的一部分.虽然开发者为Java框架(例如Spring的@Autowired)开发了无数的自定义注解,但编译器认可的一些注解非常重要. 在本文中 ...

  9. 重拾Object--(一)初识

    Java中的Object类有着特殊的意义,他是所有其它类的父类,查看Object类的源代码,可以发现代码不多,逻辑也很简单. Java所有类的源代码我们都可以在JDK的文件中查看,在JDK下会有一个名 ...

  10. mysql utf8改utf8mb4

    由于需要用到utf8mb4,之前是utf8现在给改成utf8mb4 查看当前环境 SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' ...