设$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. ubuntu cron 及 crontab 自动执行任务

    Add the below line (with tweaks) to the end of /etc/crontab: 30 23 * * * root shutdown -h now At 23: ...

  2. phantomjs 中如何使用xpath

    function getNodeInfo(inputcsvPath) { var htmlnodeInfo = page.evaluate(function () { //_Ltg var XPATH ...

  3. php学习之mysqli的面向对象

    // mySqlTool.php  封装好的工具类 <?php class SqlTool{ private $conn; private $host="localhost" ...

  4. Android用户界面开发:TabHost

    TabHost是整个Tab的容器,包括两部分,TabWidget和FrameLayout.TabWidget就是每个tab的标签,FrameLayout则是tab内容.TabHost的二种实现方式:第 ...

  5. Python-垃圾回收机制

    引子: 我们定义变量会申请内存空间来存放变量的值,而内存的容量是有限的,当一个变量值没有用了(简称垃圾)就应该将其占用的内存给回收掉,而变量名是访问到变量值的唯一方式,所以当一个变量值没有关联任何变量 ...

  6. shell expect权威指南和实战

    一.概述 我们通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如telnet服务器等进行交互的功能.而expec ...

  7. 100以内与7有关的数(for和if)

  8. huffman编解码英文文本[Python]

    对英文文本的字母进行huffman编码,heapq优先队列构建huffman树 python huffman.py source.txt result.txt import sys import he ...

  9. IE下script标签的readyState属性

    在做加载器时遇到一个常见问题,如何判定一个脚本已经执行完毕. "uninitialized" – 原始状态 "loading" – 下载数据中 "lo ...

  10. 【AtCoder】AISing Programming Contest 2019

    本来以为是1199rated的..仔细一看发现是1999,所以就做了一下 这场涨分很轻松啊...为啥又没打 等pkuwc考完我一定打一场atcoder(咕咕咕,咕咕咕,咕咕咕咕咕咕咕~) 但是其实我思 ...