[hdu7033]Typing Contest
为了避免浮点运算,不妨将$f_{i}$乘上$C=10^{2}$,问题即求$\max_{S\subseteq [1,n]}\frac{\sum_{i\in S}(C^{2}-(\sum_{j\in S}f_{j}-f_{i})f_{i})s_{i}}{C^{2}}$
记$F=\sum_{i\in S}f_{i}$,考虑枚举$F$,并以$f_{i}$为质量、$(C^{2}-(F-f_{i})f_{i})s_{i}$为价值,问题即是要求质量和恰为$F$的最大价值和,可以通过01背包解决
考虑此时的复杂度,$F$的范围为$Cn$,复杂度即$o(C^{2}n^{3})$,无法通过
事实上,最优解满足$F\le C\sqrt{n}$,证明如下:
注意到随着$F$的增大价值降低,因此不妨将"质量和恰为$F$"改为不超过$F$
如果某人价值为负,那么不选一定更优,因此即$\forall i\in S,(C^{2}-(F-f_{i})f_{i})s_{i}\ge 0$
去掉$s_{i}$再将其对所有$i$求和,整理后即$F^{2}-|S|C^{2}\le \sum_{i\in S}f_{i}^{2}$
去掉$s_{i}$并乘上$f_{i}$,再将其对所有$i$求和,整理后即$\sum_{i\in S}f_{i}^{2}\le \frac{\sum_{i\in S}f_{i}^{3}
}{F}+|S|C^{2}$
将两式联立,即$F^{2}-|S|C^{2}\le \frac{\sum_{i\in S}f_{i}^{3}
}{F}+|S|C^{2}$
显然$|S|\le n$且$\frac{\sum_{i\in S}f_{i}^{3}}{F}\le F^{2}$,由此放缩即$F^{2}\le nC^{2}$,也即$F\le C\sqrt{n}$
由此,复杂度降为$o(C^{2}n^{2})$,可以通过

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 105
4 #define C 100
5 #define ll long long
6 int t,n,m,a[N];
7 ll ans,s[N],f[N*C];
8 double p;
9 int main(){
10 scanf("%d",&t);
11 while (t--){
12 scanf("%d",&n);
13 m=ans=0;
14 for(int i=1;i<=n;i++){
15 scanf("%lld%lf",&s[i],&p);
16 a[i]=floor(p*C+0.5);
17 m+=a[i];
18 }
19 m=C*((int)sqrt(n)+1);
20 for(int F=0;F<=m;F++){
21 for(int i=0;i<=F;i++)f[i]=0;
22 for(int i=1;i<=n;i++){
23 ll S=(C*C-(F-a[i])*a[i])*s[i];
24 for(int j=F;j>=a[i];j--)f[j]=max(f[j],f[j-a[i]]+S);
25 }
26 ans=max(ans,f[F]);
27 }
28 printf("%lld.",ans/(C*C));
29 ans%=C*C;
30 if (ans<1000)printf("0");
31 if (ans<100)printf("0");
32 if (ans<10)printf("0");
33 printf("%lld00000\n",ans);
34 }
35 return 0;
36 }
[hdu7033]Typing Contest的更多相关文章
- Python标准库--typing
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 模块简介 Python 3.5 增加了一个有意思的库--typ ...
- 最牛的打字效果JS插件 typing.js
最新在做公司的一个项目,需要实现一个敲打代码的动画效果,粗意味比较简单,果断自己直接开写,写着写着发现是一个坑.需要支持语法高亮,并不能直接简单的用setTimeout来动态附件innerHTML.苦 ...
- Monkey Patch/Monkey Testing/Duck Typing/Duck Test
Monkey Patch Monkey Testing Duck Typing Duck Test
- Programming Contest Problem Types
Programming Contest Problem Types Hal Burch conducted an analysis over spring break of 1999 and ...
- hdu 4946 2014 Multi-University Training Contest 8
Area of Mushroom Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- 2016 Multi-University Training Contest 2 D. Differencia
Differencia Time Limit: 10000/10000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...
- 2016 Multi-University Training Contest 1 G. Rigid Frameworks
Rigid Frameworks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- hdu-5988 Coding Contest(费用流)
题目链接: Coding Contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Ot ...
- ZOJ 3703 Happy Programming Contest
偏方记录背包里的物品.....每个背包的价值+0.01 Happy Programming Contest Time Limit: 2 Seconds Memory Limit: 65536 ...
随机推荐
- 5-基本的sql查询以及函数的使用
基本SQL查询语句以及函数的使用 格式元素 描述 YYYY 四位的年份 MONTH 月份的英文全称 MON 月份的英文简写 MM 月份的数字表示 DD 日起的1-31数字表示 D 星期几的数字表示1- ...
- SpringBoot入门08-整合Mabatis
整合所需的依赖 注解方式和映射文件方式的mybatis都可以被整合进springboot 创建springboot的web项目后,在pom加入spring-mybatis和mysql-jdbc和thy ...
- 【java】【作业】定义课程信息;继承和组合练习
问题: 定义课程信息类,包含课程编号.课程名称及学生成绩.编程实现对软件工程专业的某班级的所有课程成绩统计,包括平均成绩.最高成绩.最低成绩,并打印成绩等级分布律. 分析 初分析: 父类(课程信息类) ...
- Vulnhub实战-FALL靶机👻
Vulnhub实战-FULL靶机 下载地址:http://www.vulnhub.com/entry/digitalworldlocal-fall,726/ 1.描述 通过描述我们可以知道这个靶机枚举 ...
- SharkCTF2021 fastcalc题记
web --> python脚本编写练习. 直接访问发现全是乱码: 看包发现Content-Type里面没有charset=utf-8. 于是用python访问一下,用.encoding='ut ...
- 康托展开+逆展开(Cantor expension)详解+优化
康托展开 引入 康托展开(Cantor expansion)用于将排列转换为字典序的索引(逆展开则相反) 百度百科 维基百科 方法 假设我们要求排列 5 2 4 1 3 的字典序索引 逐位处理: 第一 ...
- springBoot服务整合线程池ThreadPoolTaskExecutor与@Async详解使用
ThreadPoolExecutor:=======这个是java自己实现的线程池执行类,基本上创建线程池都是通过这个类进行的创建.ThreadPoolTaskExecutor:========这个是 ...
- seata整合多数据源
seata整合多数据源 一.背景 二.整合步骤 1.seata server的搭建 2.引入数据源切换组件 3.引入seata组件 4.配置多数据源 5.关闭seata自己默认的数据源代理 6.配置s ...
- 对dy和Δy的浅薄理解
一.导数定义 当函数y=f(x)的自变量x在一点x0上产生一个增量Δx时,函数输出值的增量Δy与自变量增量Δx的比值在Δx趋于0时的极限a如果存在,a即为在x0处的导数,记作f'(x0)或df(x0) ...
- uvm_subscriber
subscriber是消费,用户的意思 uvm_subscriber主要作为coverage的收集方式之一 uvm_subscriber的代码非常简单,继承于uvm_component,再加上一个an ...