题意



分析

考场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. CentOS 配置Tomcat服务脚本

    #!/bin/bash # description: Tomcat7 Start Stop Restart # processname: tomcat7 # chkconfig: JAVA_HOME= ...

  2. Anton and School - 2 CodeForces - 785D (组合计数,括号匹配)

    大意: 给定括号字符串, 求多少个子序列是RSGS. RSGS定义如下: It is not empty (that is n ≠ 0). The length of the sequence is ...

  3. hdu多校2C

    题意:找多条路径覆盖所有的边,求最小路径数,要求输出路径 题解:新建一个点n+1,所有奇点向它连边,然后跑欧拉回路,最后把新加的边删去,一段连续的边就是一条路径 = =但是由于太久没写欧拉回路以及之前 ...

  4. OC MRC之autorelease问题(代码分析)

    // // main.m // 08-autorelease // // Created by apple on 13-8-9. // Copyright (c) 2013年 itcast. All ...

  5. qt +ChartDirector 绘制图表

    自从开发由c#转入Qt后一直寻找一款Qt下的图形控件库,最后ChartDirector控件映入眼球.ChartDirector控件使用方便,快捷,灵活,功能强大,交互性强.在web服务器以及嵌入式应用 ...

  6. Idea热部署jrebel失败

    Idea热部署jrebel

  7. sql server中的大数据的批量操作(批量插入,批量删除)

    首先我们建立一个测试用员工表 ---创建一个测试的员工表--- create table Employee( EmployeeNo int primary key, --员工编号 EmployeeNa ...

  8. UVALive 4168

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA08AAABMCAIAAAA6IBt+AAAgAElEQVR4nO1dybXjOg7tWJSK65yKxL

  9. selenium(三)浏览器操作

    from time import sleep from selenium import webdriver #定义浏览器是firefox driver=webdriver.Firefox() #页面打 ...

  10. POJ 1007 DNA sorting (关于字符串和排序的水题)

    #include<iostream>//写字符串的题目可以用这种方式:str[i][j] &str[i] using namespace std; int main() {int ...