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. 数字统计(NOIP2010)

    题目链接:数字统计 这题很水. 思路就是:枚举每一个区间内的数,然后对于每一个数,每个位去判断是否为2,就行了. 下面上代码: #include<bits/stdc++.h> using ...

  2. kbmmw 5.06.00 beta 发布

    原生.高效.可扩展.跨平台通信库来了. we are happy to announce v5.06.00 BETA of our popular middleware for Delphi and  ...

  3. 区间DP初探 P1880 [NOI1995]石子合并

    https://www.luogu.org/problemnew/show/P1880 区间dp,顾名思义,是以区间为阶段的一种线性dp的拓展 状态常定义为$f[i][j]$,表示区间[i,j]的某种 ...

  4. 2018.12.08 codeforces 946D. Timetable(背包)

    传送门 题意简述:有一个人上n天课,每天有m个小时的时间安排表(一个01串),为1表示要上课,否则不上课,求出如果可以最多翘kkk节课这nnn天在校待的总时间的最小值(一天必须在所有课上完后才能离开) ...

  5. IPython:一种交互式计算和开发环境(魔术命令,快捷键)

    %run命令 在IPython会话环境中,所有文件都可以通过%run命令当做Python程序来运行. 假设在ipython_script_test.py中存放了一段简单的脚本,如下所示: def f( ...

  6. spring+springMVC+mybatis+maven+mysql环境搭建(一)

    环境搭建是最基础的,但是发现平时很多时候大家都是ctrl c+ctrl v,这样对于很多细节完全不清楚,来,一起深入了解下 一.准备工作 首先得准备好maven.mysql啥的,这些略... 并且my ...

  7. springboot mybatis 分页整合

    spring boot 整合mybatis ,分两块mybatis 整合,分页整合.   1.pom文件增加 <dependency> <groupId>org.mybatis ...

  8. vue 开发系列(三) vue 组件开发

    概要 vue 的一个特点是进行组件开发,组件的优势是我们可以封装自己的控件,实现重用,比如我们在平台中封装了自己的附件控件,输入控件等. 组件的开发 在vue 中一个组件,就是一个独立的.vue 文件 ...

  9. (11)Are you a giver or a taker?

    https://www.ted.com/talks/adam_grant_are_you_a_giver_or_a_taker/transcript 00:00I want you to look a ...

  10. 在 Linux/windows下 命令行中使用和执行 PHP 代码[交互式php]

    [注释]在ubuntu下,升级php到7.1版本,虽然提示的是Interactive mode enabled, 但实际上可以直接书写命令,和interactive shell效果一样. 一:wind ...