BZOJ 4753 [Jsoi2016]最佳团体 ——01分数规划 树形DP
要求比值最大,当然用分数规划。
二分答案,转化为选取一个最大的联通块使得它们的和大于0
然后我们直接DP。
复杂度$O(n^2\log {n})$
#include <map>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
#define ll long long
#define inf 1e15
#define eps 1e-6
#define mp make_pair
#define maxn 2505
int k,n;
double s[maxn],p[maxn],l,r,mid,dp[maxn][maxn],tmp[maxn];
int h[maxn],to[maxn],ne[maxn],en=0,siz[maxn]; void add(int a,int b)
{to[en]=b;ne[en]=h[a];h[a]=en++;} void Tree_DP(int o)
{
dp[o][1]=p[o]-mid*s[o];siz[o]=1;
for (int i=h[o];i>=0;i=ne[i])
{
Tree_DP(to[i]);
F(j,0,siz[o]+siz[to[i]]) tmp[j]=-inf;
F(j,1,siz[o]) F(k,0,siz[to[i]])
tmp[j+k]=max(tmp[j+k],dp[o][j]+dp[to[i]][k]);
F(j,0,siz[o]+siz[to[i]]) dp[o][j]=max(dp[o][j],tmp[j]);
siz[o]+=siz[to[i]];
}
} int main()
{
memset(h,-1,sizeof h);
scanf("%d%d",&k,&n);k++;
F(i,1,n)
{
int x;
scanf("%lf%lf%d",&s[i],&p[i],&x);
add(x,i);
}
l=0;r=1e10;
while (fabs(r-l)>eps)
{
mid=(l+r)/2;
F(i,0,n) F(j,0,k) dp[i][j]=-inf;
s[0]=1;p[0]=mid;
Tree_DP(0);
int flag=0;
if (dp[0][k]>=0) l=mid;
else r=mid;
}
printf("%.3f\n",l);
}
BZOJ 4753 [Jsoi2016]最佳团体 ——01分数规划 树形DP的更多相关文章
- BZOJ.4753.[JSOI2016]最佳团体(01分数规划 树形背包DP)
题目链接 \(Description\) 每个点有费用si与价值pi,要求选一些带根的连通块,总大小为k,使得 \(\frac{∑pi}{∑si}\) 最大 \(Solution\) 01分数规划,然 ...
- 【BZOJ】4753: [Jsoi2016]最佳团体 01分数规划+树上背包
[题意]n个人,每个人有价值ai和代价bi和一个依赖对象ri<i,选择 i 时 ri 也必须选择(ri=0时不依赖),求选择k个人使得Σai/Σbi最大.n<=2500,ai,bi< ...
- BZOJ4753 JSOI2016最佳团体(分数规划+树形dp)
看到比值先二分答案.于是转化成一个非常裸的树形背包.直接暴力背包的话复杂度就是O(n2),因为相当于在lca处枚举每个点对.这里使用一种更通用的dfs序优化树形背包写法.https://www.cnb ...
- bzoj4753: [Jsoi2016]最佳团体(分数规划+树形依赖背包)
菜菜推荐的“水题”虐了我一天T T...(菜菜好强强qwq~ 显然是个分数规划题,二分答案算出p[i]-mid*s[i]之后在树上跑依赖背包,选k个最大值如果>0说明还有更优解. 第一次接触树形 ...
- bzoj 4753 最佳团体 —— 01分数规划+树形背包
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4753 注意赋初值为 -inf: eps 设为 1e-3 会 WA ... 代码如下: #in ...
- BZOJ 4753 [Jsoi2016]最佳团体 | 树上背包 分数规划
BZOJ 4753 [Jsoi2016]最佳团体 | 树上背包 分数规划 又是一道卡精度卡得我头皮发麻的题-- 题面(--蜜汁改编版) YL大哥是24OI的大哥,有一天,他想要从\(N\)个候选人中选 ...
- BZOJ4753: [Jsoi2016]最佳团体(分数规划+树上背包)
BZOJ4753: [Jsoi2016]最佳团体(分数规划+树上背包) 标签:题解 阅读体验 BZOJ题目链接 洛谷题目链接 具体实现 看到分数和最值,考虑分数规划 我们要求的是一个\(\dfrac{ ...
- bzoj 4753: [Jsoi2016]最佳团体【01分数规划+二分+树上背包】
01分数规划,二分答案然后把判别式变成Σp[i]-Σs[i]*mid>=0,然后树上背包判断,设f[i][j]为在i点子树里选j个的最大收益,随便背包一下就好 最丧病的是神卡常--转移的时候要另 ...
- P1642 规划 01分数规划+树形DP
$ \color{#0066ff}{ 题目描述 }$ 某地方有N个工厂,有N-1条路连接它们,且它们两两都可达.每个工厂都有一个产量值和一个污染值.现在工厂要进行规划,拆除其中的M个工厂,使得剩下的工 ...
随机推荐
- Node.js 打造实时多人游戏框架
在 Node.js 如火如荼发展的今天,我们已经可以用它来做各种各样的事情.前段时间UP主参加了极客松活动,在这次活动中我们意在做出一款让“低头族”能够更多交流的游戏,核心功能便是 Lan Party ...
- 洛谷 P1901 发射站
题目描述 某地有 N 个能量发射站排成一行,每个发射站 i 都有不相同的高度 Hi,并能向两边(当 然两端的只能向一边)同时发射能量值为 Vi 的能量,并且发出的能量只被两边最近的且比 它高的发射站接 ...
- Mysql 主备配置
来自:http://blog.csdn.net/u013256816/article/details/52536283 1. 了解主备配置过程原理. http://blog.csdn.net/u013 ...
- 粗谈Android未来前景
Andriod作为智能手机机兴起的操作系统,有着非同寻常的地位.而相对于他的竞争对手ios,两大系统各有自身的优缺点,有太多的不同点,但相比较用户体验来说ios略胜一筹. Android系统极具开发性 ...
- java中的堆与栈
Java 中的堆和栈 Java把内存划分成两种:一种是栈内存,一种是堆内存. 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配 . 当在一段代码块定义一个变量时,Java就在栈中 ...
- 图片,二进制,oracle数据库
图片在oracle数据库中一般以二进制存在,存储类型是blob,然而clob类型一般存储的是大于4000的字符,不能用来存储图像这样的二进制内容,下面展示一下实现图像,二进制,oracle 数据库的应 ...
- 自己太水了—HDOJ_2212
Problem Description A DFS(digital factorial sum) number is found by summing the factorial of every d ...
- 基于Python的Web应用开发实战——3 模板
要想开发出易于维护的程序,关键在于编写形式简洁且结构良好的代码. 当目前为止,你看到的示例都太简单,无法说明这一点,但Flask视图函数的两个完全独立的作用却被融合在了一起,这就产生了一个问题. 视图 ...
- struts2的多个文件上传
成功效果图: 上篇文章描述了单个文件的上传和配置,下面主要讲解下不同的地方: index.jsp <head> <script ...
- 分布式mysql 和 zk ( zookeeper )的分布式的区别 含冷热数据讨论
zk ( zookeeper )的分布式仅仅指的是备份模式. 分布式 mysql 不仅仅要关注备份(从以往的半主,主主,到 paxos). (mysql 比 hbase 的region成熟, hdfs ...