正题

题目链接:https://www.luogu.com.cn/problem/CF183D


题目大意

\(n\)个人,\(m\)种衣服,给出每个人喜欢某件衣服的概率,你可以选择\(n\)件衣服带过去(可以重复款式)。求最大化能拿到喜欢衣服人的期望数量。

\(1\leq n\leq 3000,1\leq m\leq 300\)


解题思路

考虑暴力的\(dp\),设\(f_{i,j,k}\)表示对于前\(k\)个人种类为\(j\)的衣服选择了\(i\)件。

这样显然过不了。

但是考虑答案,假设我们第\(i\)种衣服选择了\(k\)件那么产生的贡献就是

\[\sum_{j=0}^k i\times f_{i,j,n}+k\sum_{j=k+1}^nf_{i,j,n}
\]

然后对于\(k->k+1\)会多产生的贡献就是\(1-\sum_{j=1}^kf_{i,j,n}\)。考虑到这个值肯定是单调递减的,所以贡献函数是一个关于\(k\)的上凸函数。

然后就是很经典的方法了,每次暴力选择一个能扩展的最大的扩展即可。

时间复杂度\(O(n(n+m))\)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int M=310,N=3100;
int n,m,k[M];double s[M],f[2][M][N],a[M][N],ans;
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)f[0][i][0]=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
scanf("%lf",&a[j][i]);
a[j][i]/=1000.0;
f[0][j][i]=f[0][j][i-1]*(1-a[j][i]);
}
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++)
f[1][i][j]=f[1][i][j-1]*(1-a[i][j])+f[0][i][j-1]*a[i][j];
k[i]=1;s[i]=f[0][i][n];
}
for(int p=1;p<=n;p++){
int pos=1;
for(int i=2;i<=m;i++)
if(s[i]<s[pos])pos=i;
ans=ans+(1-s[pos]);
s[pos]=s[pos]+f[k[pos]][pos][n];
k[pos]^=1;int o=k[pos];
for(int i=0;i<=n;i++)f[o][pos][i]=0;
for(int i=1;i<=n;i++)
f[o][pos][i]=f[o][pos][i-1]*(1-a[pos][i])+f[!o][pos][i-1]*a[pos][i];
}
printf("%.12lf\n",ans);
return 0;
}

CF183D-T-shirtx【dp,贪心】的更多相关文章

  1. 【bzoj4027】[HEOI2015]兔子与樱花 树形dp+贪心

    题目描述 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号从0到n-1,这n个分叉点由n-1个树枝连接,我们可以把它 ...

  2. BZOJ 2021 [Usaco2010 Jan]Cheese Towers:dp + 贪心

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2021 题意: John要建一个奶酪塔,高度最大为m. 他有n种奶酪.第i种高度为h[i]( ...

  3. 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)

    洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...

  4. 【BZOJ-1046】上升序列 DP + 贪心

    1046: [HAOI2007]上升序列 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3723  Solved: 1271[Submit][Stat ...

  5. Codeforces 675E Trains and Statistic(DP + 贪心 + 线段树)

    题目大概说有n(<=10W)个车站,每个车站i卖到车站i+1...a[i]的票,p[i][j]表示从车站i到车站j所需买的最少车票数,求所有的p[i][j](i<j)的和. 好难,不会写. ...

  6. 【HDU 2546】饭卡(DP+贪心)

    贪心:最贵的留到最后买.状态转移方程:dp[j]=dp[j+a[i]]|dp[j],dp[i]表示余下i元. 原来就不足5元,那就不能买啦. #include<cstdio> #inclu ...

  7. POJ 1065 Wooden Sticks / hdu 1257 最少拦截系统 DP 贪心

    参考链接:http://blog.csdn.net/xiaohuan1991/article/details/6956629 (HDU 1257 解题思路一样就不继续讲解) POJ 1065题意:给你 ...

  8. HDU1069:Monkey and Banana(DP+贪心)

    Problem Description A group of researchers are designing an experiment to test the IQ of a monkey. T ...

  9. 线段树+dp+贪心 Codeforces Round #353 (Div. 2) E

    http://codeforces.com/contest/675/problem/E 题目大意:有n个车站,每个车站只能买一张票,这张票能从i+1到a[i].定义p[i][j]为从i到j所需要买的最 ...

  10. hdoj 1257 DP||贪心

    最少拦截系统 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

随机推荐

  1. .net core signalR 全局异常处理

    Hub的异常拦截 { } { } *:first-child { } *:last-child { } { } { } { } { } { } { } { } { } { } h6:first-chi ...

  2. LeetCode42. 接雨水(java)

    42.接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种 ...

  3. jQuery中的层级选择器(四、二):后代元素、子元素、相邻元素、兄弟元素

    <!DOCTYPE html> <html> <head> <title>层次选择器</title> <meta http-equiv ...

  4. 2020年秋游戏开发-Gluttonous Snake

    此作业要求参考https://edu.cnblogs.com/campus/nenu/2020Fall/homework/11577 GitHub地址为https://github.com/15011 ...

  5. opencv入门系列教学(二)图像入门:读取、展示并保存视频

    一.从相机读取视频 通常情况下,我们必须用摄像机捕捉实时画面.让我们从摄像头捕捉一段视频(我使用的是我笔记本电脑内置的网络摄像头) ,将其转换成灰度视频并显示出来.        要捕获视频,我们需要 ...

  6. 解锁 VS Code 更多可能性,轻松入门 WebView

    作者:HelloGitHub-小夏 说起 VS Code 大家普遍印象应该都差不多是这样:不就是个编辑器嘛,最主要的还是 coding 的快感咯. 里面很多功能都应该是围绕如何提高 coding 效率 ...

  7. 如何攻击Java Web应用

    越来越多的企业采用Java语言构建企业Web应用程序,基于Java主流的框架和技术及可能存在的风险,成为被关注的重点. 本文从黑盒渗透的角度,总结下Java Web应用所知道的一些可能被利用的入侵点. ...

  8. 【Azure 应用服务】App Service For Windows 环境中部署Python站点后,如何继续访问静态资源文件呢(Serving Static Files)?

    问题描述 当创建一个App Service 后,运行时环境和版本选择Windows 和 Python 3.6. 登录Kudu 站点查看,默认的文件有 web.config, hostingstart- ...

  9. mysql8.0----mysqldump抛出:Unknown table 'COLUMN_STATISTICS' in information_schema (1109)

    问题:我尝试使用mysqldump时,得到以下错误: 复制 $> mysqldump --single-transaction --h  -u user -p db > db.sql my ...

  10. Python3-sqlalchemy-orm

    1 #-*-coding:utf-8-*- 2 #__author__ = "logan.xu" 3 4 5 import sqlalchemy 6 from sqlalchemy ...