01分數規畫

我們可以二分一個ans,然後化一下式子

一個總共有k個人的方案,要使(a[1]+a[2]+....+a[k])/(b[1]+b[2]+....+b[k])>=ans(a[1]+a[2]+....+a[k])/(b[1]+b[2]+....+b[k])>=ans(a[1]+a[2]+....+a[k])/(b[1]+b[2]+....+b[k])>=ans,當且僅當(a[1]−b[1]∗ans)+(a[2]−b[2]∗ans)+.....+(a[k]−b[k]∗ans)>=0(a[1]-b[1]*ans)+(a[2]-b[2]*ans)+.....+(a[k]-b[k]*ans)>=0(a[1]−b[1]∗ans)+(a[2]−b[2]∗ans)+.....+(a[k]−b[k]∗ans)>=0,由於這道題兒子選了父親必須選,於是將第i個物品權值變為(a[i]−b[i]∗ans)(a[i]-b[i]*ans)(a[i]−b[i]∗ans),進行背包dp即可,記f[x][i]f[x][i]f[x][i]表示x點選多少個人,枚舉選多少個人再dp,看f[0][k]f[0][k]f[0][k]是否>=0即可

#include<bits/stdc++.h>
using namespace std;
int k,n,h[2510],v[10010],nxt[10010],ec,sz[2510];
double s[2510],p[2510],f[2510][2510],c[2510];
void add(int x,int y){v[++ec]=y;nxt[ec]=h[x];h[x]=ec;}
void dfs(int x){
	f[x][1]=c[x];
	sz[x]=1;
	for(int i=2;i<=k;i++)
		f[x][i]=-1e9;
	for(int i=h[x];i;i=nxt[i]){
		dfs(v[i]);
		sz[x]+=sz[v[i]];
		for(int j=min(sz[x],k);j>=0;j--)
			for(int l=0;l<=min(sz[v[i]],j-1);l++)
				f[x][j]=max(f[x][j],f[v[i]][l]+f[x][j-l]);
	}
}
int main(){
	scanf("%d%d",&k,&n);k++;
	for(int i=1;i<=n;i++){
		int c;
		scanf("%lf%lf%d",&p[i],&s[i],&c);
		add(c,i);
	}
	double l=0,r=10000;
	while(fabs(r-l)>1e-4){
		double mid=(l+r)*0.5;
		for(int i=1;i<=n;i++)
			c[i]=s[i]-p[i]*mid;
		dfs(0);
		if(f[0][k]>=0)l=mid;
		else r=mid;
	}
	printf("%.3lf",l);
}

jzoj4512的更多相关文章

随机推荐

  1. js中实现 复制到剪切板 功能

    一:引包 <script type="text/javascript" src="jquery.js"></script> <sc ...

  2. hdu 6208(后缀自动机、或者AC自动机

    题意:给你n个字符串,问你是否存在一个字符串可以从中找到其他n-1个字符串. 思路:其实很简单,找到最长的那个字符串对他进行匹配,看是否能匹配到n-1个字符串. 可以用AC自动机或者后缀自动机做,但是 ...

  3. java web实践

    语言:java.javascript 软件:eclipse.mysql 环境配置:下载jdk:配置jdk环境变量.相关教程:https://jingyan.baidu.com/article/db55 ...

  4. java的Scanner获取输入内容

    //导入 scanner的包 import java.util.Scanner; Scanner scanner = new Scanner(System.in); System.out.printl ...

  5. Event.target和Event.currentTarget的区别

    <style> * { margin:0; padding:0; list-style:none; } #ul { width:400px; height:250px; margin:0 ...

  6. 记录:CSS特殊性——权值规则

    浏览器是根据权值来判断使用哪种css样式的,权值高的就使用哪种css样式. 下面是权值的规则: 标签的权值为1,类选择符的权值为10,ID选择符的权值最高为100.例如下面的代码: p{color:r ...

  7. FPGA之初认识

    什么是FPGA FPGA(Field-Programmable Gate Array),即现场可编程门阵列 .看到编程两个字码农就笑了,不就是编程嘛,那可是我们的强项 .且慢,此编程非彼编程 .一定要 ...

  8. 百度地图的js导入及使用

    做页面,地图可能会用到 1 导入百度地图的js库 <script type="text/javascript" src="http://api.map.baidu. ...

  9. Beta阶段第一篇 Scrum 冲刺博客

    介绍小组新加入的成员,Ta担任的角色 新成员 担任角色 张晨晨 测试 理由:晨晨代码能力有待提高,但心思细腻有耐心,适合测试工作. 讨论是否需要更换团队的PM 通过团队讨论决定不更换团队PM,理由是在 ...

  10. js中对String去空格

    str为要去除空格的字符串: 去除所有空格: str = str.replace(/\s+/g,""); 去除两头空格: str = str.replace(/^\s+|\s+$/ ...