题意



分析

考场30分

枚举大小为k的子集的算法终于用上了。

时间复杂度

\[O\left(\binom{n}{k} \cdot \binom {k}{\frac{k}{2}} \cdot k\right)
\]

#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<ctime>
#include<iostream>
#include<string>
#include<vector>
#include<list>
#include<deque>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<bitset>
#include<algorithm>
#include<complex>
#pragma GCC optimize ("O0")
using namespace std;
template<class T> inline T read(T&x)
{
T data=0;
int w=1;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')
w=-1;
ch=getchar();
}
while(isdigit(ch))
data=10*data+ch-'0',ch=getchar();
return x=data*w;
}
typedef long long ll;
const int INF=0x7fffffff; const int MAXN=20;
int n,k;
double p[MAXN],t[MAXN];
int len; int next(int comb)
{
int x = comb & -comb,y = comb + x;
comb=(((comb & ~y) / x) >> 1) | y;
return comb;
} int main()
{
freopen("vote.in","r",stdin);
freopen("vote.out","w",stdout);
read(n);read(k);
for(int i=0;i<n;++i)
{
scanf("%lf",p+i);
}
double maxv=0;
for(int i=(1<<k)-1;i<(1<<n);i=next(i))
{
// cerr<<"i="<<i<<endl;
len=0;
for(int j=0;j<n;++j)
if(i&(1<<j))
t[len++]=p[j];
// cerr<<"len="<<len<<endl;
double ans=0;
for(int j=(1<<(len/2))-1;j<(1<<len);j=next(j)) // len=k
{
// cerr<<" j="<<j<<endl;
double sum=1;
for(int s=0;s<len;++s)
{
if(j&(1<<s))
{
// cerr<<" mul 1 "<<t[s]<<endl;
sum*=t[s];
}
else
{
sum*=(1.0-t[s]);
// cerr<<" mul 2 "<<(1.0-t[s])<<endl;
}
}
// cerr<<" sum="<<sum<<endl;
ans+=sum;
}
maxv=max(maxv,ans);
}
printf("%lf\n",maxv);
// fclose(stdin);
// fclose(stdout);
return 0;
}

标解

解释一下

  1. 所谓的贡献,就是把其他的看成常量,用i同学来计算的计算式。
  2. 换成前后至少有一个不劣。
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<ctime>
#include<iostream>
#include<string>
#include<vector>
#include<list>
#include<deque>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<bitset>
#include<algorithm>
#include<complex>
#pragma GCC optimize ("O0")
using namespace std;
template<class T> inline T read(T&x)
{
T data=0;
int w=1;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')
w=-1;
ch=getchar();
}
while(isdigit(ch))
data=10*data+ch-'0',ch=getchar();
return x=data*w;
}
typedef long long ll;
const int INF=0x7fffffff; const int MAXN=2e3+7;
int n,k;
double p[MAXN],pre[MAXN][MAXN],suf[MAXN][MAXN]; int main()
{
freopen("vote.in","r",stdin);
freopen("vote.out","w",stdout);
read(n);read(k);
for(int i=1;i<=n;++i)
scanf("%lf",p+i);
sort(p+1,p+n+1); pre[0][0]=1;
for(int i=1;i<=n;++i)
{
double p=::p[i];
for(int j=n;j>=1;--j)
pre[i][j]=p*pre[i-1][j-1]+(1-p)*pre[i-1][j];
pre[i][0]=(1-p)*pre[i-1][0];
} suf[n+1][0]=1;
for(int i=n;i>=1;--i)
{
double p=::p[i];
for(int j=n;j>=1;--j) // 从n到1保证不会被自己更新
suf[i][j]=p*suf[i+1][j-1]+(1-p)*suf[i+1][j];
suf[i][0]=(1-p)*suf[i+1][0];
} int m=k/2;
double ans=0;
for(int i=0;i<=k;++i)
{
int j=n+1-k+i; // n-x+1=k-i -> x=n+1-k+i
double sum=0;
for(int ci=0;ci<=m;++ci)
sum+=pre[i][ci]*suf[j][m-ci];
ans=max(ans,sum);
} printf("%.9f\n",ans);
// fclose(stdin);
// fclose(stdout);
return 0;
}

test20181006 投票的更多相关文章

  1. 运用php做投票题,例题

    要求大概是这样的,有一个题目,题目下面是复选框,要求点完复选框提交后会变成进度条,各选项的进度条百分比,和投票数量 首先还是要在数据库建两张表,如下: 要完成这个题目,需要建两个页面 <!DOC ...

  2. easy_UI 投票列表

    首先我们考虑一下在项目投票种用到的属性(ID,投票标题,备选项目,参与人数) entity package cn.entity; public class GridNode { private Lon ...

  3. 利用django创建一个投票网站(六)

    建你的第一个 Django 项目, 第六部分 这一篇从第五部分(zh)结尾的地方继续讲起.再上一节中我们为网络投票程序编写了测试,而现在我们要为它加上样式和图片. 除了服务端生成的 HTML 以外,网 ...

  4. 利用django创建一个投票网站(五)

    创建你的第一个 Django 项目, 第五部分 这一篇从第四部分(en)结尾的地方继续讲起.我们在前几章成功的构建了一个在线投票应用,在这一部分里我们将其创建一些自动化测试. 自动化测试简介 自动化测 ...

  5. 利用django创建一个投票网站(四)

    创建你的第一个 Django 项目, 第四部分 这一篇从第三部分(zh)结尾的地方继续讲起.我们将继续编写投票应用,专注于简单的表单处理并且精简我们的代码. 编写一个简单的表单 让我们更新一下在上一个 ...

  6. 利用django创建一个投票网站(三)

    创建你的第一个 Django 项目, 第三部分 这一篇从第二部分(zh)结尾的地方继续讲起.我们将继续编写投票应用,并且聚焦于如何创建公用界面--也被称为"视图". 设计哲学 Dj ...

  7. 利用django创建一个投票网站(二)

    创建你的第一个 Django 项目, 第二部分 这一篇从第一部分(zh)结尾的地方继续讲起.本节我们将继续写 Web 投票应用,并主要关注 Django 提供的自动生成的管理页面(admin site ...

  8. 利用django创建一个投票网站(一)

    这是教程的原始链接:http://django-intro-zh.readthedocs.io/zh_CN/latest/part1/ 创建你的第一个 Django 项目, 第一部分 来跟着实际项目学 ...

  9. Django基础,Day5 - form表单投票详解

    投票URL polls/urls.py: # ex: /polls/5/vote/ url(r'^(?P<question_id>[0-9]+)/vote/$', views.vote, ...

随机推荐

  1. jsp session/application

    session的增加读取 session.setAttribute("username", "张三"); String u = (String) session ...

  2. Try2Hack 过关技巧和密码

    官网:http://www.try2hack.nl/levels 玩到第五关实在是过不去了,因为那个程序太老了,win7根本就运行不了,崩溃. 转自:http://blog.csdn.net/chin ...

  3. byte[]数组与十六进制字符串与字符串的互相转换 ——转载

    https://www.cnblogs.com/lelehellow/p/6369631.html

  4. 4-3 atom订阅源

    部分章节还没有实做练习. 网上购买了安道的Rails指南中文版.联系了这个作者问了一个问题Rails5的翻译问题. try(), 判断是否存在,不存在的话返回nil.例子:pasting @perso ...

  5. PHP函数笔记

    一.函数(Function) 1.什么是函数:封装的,可以重复使用的                       完成特定功能的代码段. 2.分类  (1)系统函数  (2)自定义函数 3.自定义函数 ...

  6. 『cs231n』无监督学习

    经典无监督学习 聚类 K均值 PCA主成分分析 等 深度学习下的无监督学习 自编码器 传统的基于特征学习的自编码器 变种的生成式自编码器 Gen网络(对抗式生成网络) 传统自编码器 原理 类似于一个自 ...

  7. 2-24-源码编译搭建LAMP环境-作业 ( By 小甘丶 )

    安装上课的内容要求: 实验环境: VMware Virtual Machine : System Version: CentOS6.8 ( Gan35 ) IP Address : 192.168.3 ...

  8. ubuntu svn二进制文件

    1. 查找2:04时间的日志文件和position. Ps:这里假设我找到的是 mysql-bin.000065 位置开始为1356. 2  复制最近的几个日志文件,从mysql-bin.000065 ...

  9. Razor视图引擎 语法学习

    下面就和大家分享下我在asp.net官网看到的资料,学习到的点语法.1.通过使用@符号,可以直接在html页面中写C#或者VB代码:运行后: 2.页面中的C#或者VB代码都放在大括号中.运行后: 3. ...

  10. XMLItergration.java

    /*===========================================================================+ | Copyright (c) 2001, ...