codeforces 183d(期望概率dp)

我还是在noip模拟看到这题,看起来就是dp,然而考试时并想不到正解,打暴力居然MLE。dp又不会做……
然后我用了一个上午才YY了出来。

题面

题目描述
你要给N个人准备礼物——T-shirt!但是你不知道他们的尺码……总共有M种尺码,编号从1到M。虽然你不记得每个人准确的尺码,但是你记得对于每一个人i,每一个尺码j,i的尺码正好是j的概率Pij.
现在你要买正好N件T-shirt,求能收到合适尺码礼物的人数的最大期望值。
你送礼物的方式是:从第1个人到第N个人依次询问,如果还有他们的尺码的T-shirt,就送出,否则就不送。

输入格式
第一行有两个整数N,M
接下来有N行,每行有M个整数,第i行的第j个整数表示Pij,用0到1000的整数表示,真实的概率用给出的数字除以1000得到。
保证每一行的整数和是1000。

输出格式
一个实数,即最大期望保留8位小数。

数据范围
50%的数据:1<=n<=500,1<=m<=100
100%的数据:1<=n<=3000,1<=m<=300

缘于我对期望的直觉,我觉得不同T-shirt之间是相互独立的,即对于每件T-shirt,你买多少件,就会产生固定的期望。不同T-shirt产生的期望是可以相加的。
看出了这一点,就可以想暴力了。
由于买多少件,就会产生固定的期望、一共买n件,所以核心算法应该是个分组背包。
所以我们就要求出每件物品,买1~n件分别的期望。
根据期望=概率*件数,对于第k件T-shirt,故我们设f[i][j]表示,假设你买了无限件,在前i个人,能送出j件的概率。
根据字面意思转移,有

f[i][j]=f[i1][j1]a[i][k]+f
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值