设$f[i][j][k]$表示前$i$个物品买了$j$个,消耗$k$个钻石,最少花多少钱,可以通过简单的DP求出。

枚举拥有的钻石数以及最多能购买的物品数的下界,那么钱数的下界是定值。

将$n$个箱子折半搜索,按钻石数分组并排序,枚举左半边每种方案,在右半边双指针求出总概率即可。

时间复杂度$O(nm2^{\frac{n}{2}}+nm^2)$。

#include<cstdio>
#include<algorithm>
const int N=33,inf=~0U>>2;
int T,n,m,lim,i,j,k,f[N][N][N],ca[N],cb[N];double p[N],ans;
struct P{int x;double p;P(){}P(int _x,double _p){x=_x,p=_p;}}a[N],A[N][33000],B[N][33000];
struct E{int c,d;}b[N];
inline bool cmp(const P&a,const P&b){return a.x<b.x;}
inline void up(int&a,int b){if(a>b)a=b;}
void dfsl(int x,int y,int z,double p){
if(x==lim){
A[y][++ca[y]]=P(z,p);
return;
}
dfsl(x+1,y,z+a[x].x,p*a[x].p);
dfsl(x+1,y+1,z,p*(1.0-a[x].p));
}
void dfsr(int x,int y,int z,double p){
if(x==n){
B[y][++cb[y]]=P(z,p);
return;
}
dfsr(x+1,y,z+a[x].x,p*a[x].p);
dfsr(x+1,y+1,z,p*(1.0-a[x].p));
}
inline double cal(int x,int y,int z){
if(z>=inf)return 0;
int n=ca[x],m=cb[y],i;double p=0,ret=0;
if(!n||!m)return 0;
for(i=1;i<=n;i++){
while(m&&A[x][i].x+B[y][m].x>=z)p+=B[y][m--].p;
ret+=A[x][i].p*p;
}
return ret;
}
int main(){
for(scanf("%d",&T);T--;printf("%.4f\n",ans)){
scanf("%d%d",&n,&m);lim=n/2;
for(i=0;i<n;i++)scanf("%d%lf",&a[i].x,&a[i].p),a[i].p*=0.01;
for(i=1;i<=m;i++)scanf("%d%d",&b[i].c,&b[i].d);
for(i=0;i<=m;i++)for(j=0;j<=m;j++)for(k=0;k<=n;k++)f[i][j][k]=inf;
f[0][0][0]=0;
for(i=1;i<=m;i++)for(j=0;j<=m;j++)for(k=0;k<=n;k++)if(f[i-1][j][k]<inf){
up(f[i][j][k],f[i-1][j][k]);
if(k+b[i].d<=n)up(f[i][j+1][k+b[i].d],f[i-1][j][k]+b[i].c);
}
for(j=0;j<=m;j++)for(k=1;k<=n;k++)up(f[m][j][k],f[m][j][k-1]);
for(i=0;i<=n;i++)ca[i]=cb[i]=0;
dfsl(0,0,0,1);
dfsr(lim,0,0,1);
for(i=0;i<=n;i++){
if(ca[i]>1)std::sort(A[i]+1,A[i]+ca[i]+1,cmp);
if(cb[i]>1)std::sort(B[i]+1,B[i]+cb[i]+1,cmp);
}
ans=p[m+1]=0;
for(i=0;i<=n;i++)for(j=m;j;j--){
p[j]=0;
for(k=0;k<=lim&&k<=i;k++)p[j]+=cal(k,i-k,f[m][j][i]);
ans+=(p[j]-p[j+1])*j;
}
}
return 0;
}

  

BZOJ4374 : Little Elephant and Boxes的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. Fedora 24 Gnome Boxes 无法ping通网络

    安装Fedora 24在试用虚拟机时发现无法ping通外网. 我傻傻地以为是软件问题. 问题描述: 尝试ping程序来测试网络连通性: (我之前也是ping百度,后来在为了少打字百度了一些比较短的域名 ...

  3. CF 204B Little Elephant and Cards

    题目链接: 传送门 Little Elephant and Cards time limit per test:2 second     memory limit per test:256 megab ...

  4. Problem B Boxes in a Line

     省赛B题....手写链表..其实很简单的.... 比赛时太急了,各种手残....没搞出来....要不然就有金了...注:对相邻的元素需要特判..... Problem B Boxes in a Li ...

  5. Codeforces Round #229 (Div. 2) C. Inna and Candy Boxes 树状数组s

    C. Inna and Candy Boxes   Inna loves sweets very much. She has n closed present boxes lines up in a ...

  6. boxes

    boxes [英][bɒksɪz][美][bɑ:ksɪz] n.盒( box的名词复数 ); 一盒; 电视; 小亭; v.把…装入盒[箱,匣]中( box的第三人称单数 ); 拳击;   以上结果来自 ...

  7. Brute Force - B. Candy Boxes ( Codeforces Round #278 (Div. 2)

    B. Candy Boxes Problem's Link:   http://codeforces.com/contest/488/problem/B Mean: T题目意思很简单,不解释. ana ...

  8. UVa 103 - Stacking Boxes(dp求解)

    题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...

  9. [CareerCup] 9.10 Stack Boxes 垒箱子问题

    9.10 You have a stack of n boxes, with widths w., heights hir and depths drThe boxes cannot be rotat ...

随机推荐

  1. springboot系列一、springboot产生背景及介绍

    一.为什么用Springboot 长期以来 Java 的开发一直让人所诟病: ·Java 项目开发复杂度极其高: · Java 项目的维护非常困难: · 在云时代如何实现项目的快速部署以及快速启动: ...

  2. zabbix系列(四)Zabbix3.0.4添加对Nginx服务的监控

    Zabbix3.0.4添加对Nginx服务的监控 通过Nginx的http_stub_status_module模块提供的状态信息来监控,所以在Agent端需要配置Nginx状态获取的脚本,和添加ke ...

  3. Maven实战(Maven+Nexus建立私服【Linux系统】)

    准备工作 下载及配置Maven3:http://www.cnblogs.com/leefreeman/archive/2013/03/05/2944519.html 下载Nexus:http://ne ...

  4. python抓取bing主页背景图片

    最初Python2写法: #!/usr/bin/env python # -*- coding:utf-8 -*- # -*- author:nancy -*- # python2抓取bing主页所有 ...

  5. liunx rm 命令修改

    原文:https://blog.csdn.net/Ace_Shiyuan/article/details/60139791 1.打开一个终端,输入命令:vim ~/.bashrc Linux下修改rm ...

  6. poj3585 树形dp 二次扫描,换根法模板题

    #include<iostream> #include<cstring> #include<cstdio> #include<vector> using ...

  7. CSS 滤镜

    声明: web前端学习笔记,欢迎大神指点.联系QQ:1522025433. CSS样式表是一种为超文本标签语言提供增强补充服务的技术,可对每一个html的标签做精雕细刻的修饰.只用html制作的网页, ...

  8. MVC开发中的常见错误-04-“System.NullReferenceException”类型的异常在 BBFJ.OA.WebApp.dll 中发生,但未在用户代码中进行处理

    未将对象引用设置到对象实例,又名空指针异常,伴随程序员开发的一生. 查看详细信息得知: SetUserRoleInfo() 首先想到的是  IBLL.IRoleInfoService RoleInfo ...

  9. bootstrap 强调相关的类

    .text-muted:提示,使用浅灰色(#999) .text-primary:主要,使用蓝色(#428bca) .text-success:成功,使用浅绿色(#3c763d) .text-info ...

  10. 几种常见SQL分页方式效率比较

    分页很重要,面试会遇到.不妨再回顾总结一下: 一:创建测试环境,(插入100万条数据大概耗时5分钟). create database DBTestuse DBTest 二:--创建测试表 creat ...