题意



分析

考场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. php 获取自己的公网IP

    <?php $externalContent = file_get_contents('http://checkip.dyndns.com/'); preg_match('/Current IP ...

  2. 绑定任意格式的XML文档到WPF的TreeView

    Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> ...

  3. py to exe —— pywin32

    xu言: 最近研究python,觉得做些windows小工具还挺好玩,就研究了下py代码如何转成exe 这里用到一个工具 pywin32 https://sourceforge.net/project ...

  4. 利用 AttachThreadInput 改变其它进程的输入法状态

    利用 AttachThreadInput 和 WM_INPUTLANGCHANGEREQUEST 消息 改变 其它 进程 的 输入 状态 ? 众所周知,通过 ActivateKeyboardLayou ...

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

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

  6. EBS管理员为供应商创建新联系人流程

    管理员为供应商创建新联系人流程 /oracle/apps/pos/supplier/webui/ByrAddCntctPG oracle.apps.pos.supplier.webui.ByrAddC ...

  7. HttpServletRequest解决中文乱码的问题

    HTTP请求有get和post,这两中方式解决中文乱码的方式如下: 1.Post方式请求 //这句话是设置post请求体的编码为utf-8 request.setCharacterEncoding(& ...

  8. jsp 简单标签开发

    实现simpleTag接口的标签通常称为是简单标签,简单标签一共定义了5个方法 setJspContext方法 setParent方法 getParent方法 setJspBody方法 doTag方法 ...

  9. Filesystem has been set read-only problem.

    case: when system is running well ,sudden tf became read-only; analyze: read the kernel log using dm ...

  10. pywin32 的安装

    这个东西不是在包管理器安装一下就可以的. https://github.com/mhammond/pywin32/releases 请到git下载exe安装文件.