题目链接

\(Description\)

每个点有费用si与价值pi,要求选一些带根的连通块,总大小为k,使得 \(\frac{∑pi}{∑si}\) 最大

\(Solution\)

01分数规划,然后dp,设f[i][j]表示i子树选j个的最大权值和,直接暴力背包转移即可

在枚举子节点选的数量时,假设x有1.2.3.4四个子节点,复杂度为 \(1*sz[1]+sz[1]*sz[2]+(sz[1]+sz[2])*sz[3]+(sz[1]+sz[2]+sz[3])*sz[4]\)

相当于每对点在LCA处有贡献,共会有n2对点,所以这部分复杂度为O(n2)

总O(n^2*log ans)

注: 初始值不要是0,因为会有较大负数。比如说 必须规定f[0][1]为-INF

eps为什么需要1e-5。。<1e-4结束不行吗(也许是因为这并不是精确答案?卡时大法好)

还可以在DFS序上DP?https://blog.csdn.net/CHN_JZ/article/details/78724391

  1. //50024 kb 3512 ms 好慢啊。。
  2. #include <cstdio>
  3. #include <cctype>
  4. #include <cstring>
  5. #include <algorithm>
  6. #define gc() getchar()
  7. const int N=2505;
  8. const double eps=1e-5,INF=1e10;
  9. int n,m,Enum,H[N],nxt[N],to[N],sz[N];
  10. double cost[N],p[N],val[N],f[N][N];
  11. inline int read()
  12. {
  13. int now=0;register char c=gc();
  14. for(;!isdigit(c);c=gc());
  15. for(;isdigit(c);now=now*10+c-'0',c=gc());
  16. return now;
  17. }
  18. inline void AddEdge(int u,int v)
  19. {
  20. to[++Enum]=v, nxt[Enum]=H[u], H[u]=Enum;
  21. }
  22. void DFS(int x)
  23. {
  24. int mn=(x>0); sz[x]=mn;
  25. for(int i=2; i<=m; ++i) f[x][i]=-INF;
  26. f[x][1]=val[x];
  27. for(int v,i=H[x]; i; i=nxt[i])
  28. {
  29. DFS(v=to[i]);
  30. for(int j=sz[x]; j>=mn; --j)//倒序 //更新上限就是当前已有sz与子节点sz之和
  31. for(int k=1; k<=sz[v]; ++k)
  32. f[x][j+k]=std::max(f[x][j+k],f[x][j]+f[v][k]);
  33. sz[x]+=sz[v];
  34. }
  35. }
  36. double Solve(double x)
  37. {
  38. for(int i=1; i<=n; ++i) val[i]=p[i]-x*cost[i];
  39. // memset(f,0xc2,sizeof f), f[0][0]=0;//too slow
  40. DFS(0);
  41. return f[0][m]>=0;
  42. }
  43. int main()
  44. {
  45. m=read(), n=read();
  46. for(int i=1; i<=n; ++i)
  47. cost[i]=read(),p[i]=read(),AddEdge(read(),i);
  48. double l=0.0,r=1e4,mid; val[0]=-INF;//f[0][1]
  49. while(r-l>eps)
  50. {
  51. if(Solve(mid=(l+r)/2.0)) l=mid;
  52. else r=mid;
  53. }
  54. printf("%.3lf",mid);
  55. return 0;
  56. }

BZOJ.4753.[JSOI2016]最佳团体(01分数规划 树形背包DP)的更多相关文章

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

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

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

    [题意]n个人,每个人有价值ai和代价bi和一个依赖对象ri<i,选择 i 时 ri 也必须选择(ri=0时不依赖),求选择k个人使得Σai/Σbi最大.n<=2500,ai,bi< ...

  3. bzoj 4753 最佳团体 —— 01分数规划+树形背包

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4753 注意赋初值为 -inf: eps 设为 1e-3 会 WA ... 代码如下: #in ...

  4. BZOJ4753: [Jsoi2016]最佳团体(分数规划+树上背包)

    BZOJ4753: [Jsoi2016]最佳团体(分数规划+树上背包) 标签:题解 阅读体验 BZOJ题目链接 洛谷题目链接 具体实现 看到分数和最值,考虑分数规划 我们要求的是一个\(\dfrac{ ...

  5. bzoj4753: [Jsoi2016]最佳团体(分数规划+树形依赖背包)

    菜菜推荐的“水题”虐了我一天T T...(菜菜好强强qwq~ 显然是个分数规划题,二分答案算出p[i]-mid*s[i]之后在树上跑依赖背包,选k个最大值如果>0说明还有更优解. 第一次接触树形 ...

  6. BZOJ4753 JSOI2016最佳团体(分数规划+树形dp)

    看到比值先二分答案.于是转化成一个非常裸的树形背包.直接暴力背包的话复杂度就是O(n2),因为相当于在lca处枚举每个点对.这里使用一种更通用的dfs序优化树形背包写法.https://www.cnb ...

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

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

  8. 【bzoj4753】[Jsoi2016]最佳团体 分数规划+树形背包dp

    题目描述 JSOI信息学代表队一共有N名候选人,这些候选人从1到N编号.方便起见,JYY的编号是0号.每个候选人都由一位编号比他小的候选人Ri推荐.如果Ri=0则说明这个候选人是JYY自己看上的.为了 ...

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

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

随机推荐

  1. Tomcat中catalina run后台运行脚本

    编写启动脚本start.sh,将其放在/srv/aubapp/bin/下 #!/bin/sh #设置web应用程序目录 export CATALINA_BASE="/srv/aubapp&q ...

  2. nodejs 在线学习课堂

    http://ww***/class/5359f6f6ec7452081a7873d8

  3. ES系列三、基本知识准备

    一.基础概念 1.索引 索引(index)是elasticsearch的一个逻辑存储,可以理解为关系型数据库中的数据库,es可以把索引数据存放到一台服务器上,也可以sharding后存到多台服务器上, ...

  4. PNG,JPEG,BMP,JIF图片格式详解及其对比

    原文地址:http://blog.csdn.net/u012611878/article/details/52215985 图片格式详解 不知道大家有没有注意过网页里,手机里,平板里的图片,事实上,图 ...

  5. 单个 LINQ to Entities 查询中的两个结构上不兼容的初始化过程中出现类型“XXXX”

    最近在做一个报表的时候,用EF使用了Contact方法,但是程式运行一直出错.最近终于找到原因了,写下来提醒下自己.好了,进入正题: 现在我举个栗子,目前数据库中有ParentStudent表和Sub ...

  6. React-Native 之 项目实战(一)

    前言 本文有配套视频,可以酌情观看. 文中内容因各人理解不同,可能会有所偏差,欢迎朋友们联系我. 文中所有内容仅供学习交流之用,不可用于商业用途,如因此引起的相关法律法规责任,与我无关. 如文中内容对 ...

  7. Android Studio安装apk失败

    可能的情况 手机上已经安装了应用或者应用卸载不彻底 解决办法: adb uninstall yourpackagename 如果uninstall失败,可以考虑 clean一下Android Stud ...

  8. QML C++插件dll引用

    插件的创建非常简单,但是它可以复用,并且为不同的应用程序扩展类型.使用创建的插件是非常灵活的解决方案.关于插件一个很好的例子见QmlBook-In-Chinese 中最后一章介绍的例子. 本文主要备忘 ...

  9. S5PV210 ADC转换

    第一节 S5PV210的ADCS5PV210的ADC可支持10bit和12bit,它支持10路输入,然后将输入的模拟的信号转换为10bit或者12bit的二进制数字信号.在5MHz的时钟下,最大转换速 ...

  10. Webpack devServer中的 proxy 实现跨域

    Webpack dev server使用http-proxy解决跨域问题 文档资料 webpack关于webpack-dev-server开启proxy的官方介绍Vue-cli proxyTable ...