test20181006 投票
题意


分析
考场30分
枚举大小为k的子集的算法终于用上了。
时间复杂度
\]
#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;
}
标解

解释一下
- 所谓的贡献,就是把其他的看成常量,用i同学来计算的计算式。
- 换成前后至少有一个不劣。
#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 投票的更多相关文章
- 运用php做投票题,例题
		要求大概是这样的,有一个题目,题目下面是复选框,要求点完复选框提交后会变成进度条,各选项的进度条百分比,和投票数量 首先还是要在数据库建两张表,如下: 要完成这个题目,需要建两个页面 <!DOC ... 
- easy_UI 投票列表
		首先我们考虑一下在项目投票种用到的属性(ID,投票标题,备选项目,参与人数) entity package cn.entity; public class GridNode { private Lon ... 
- 利用django创建一个投票网站(六)
		建你的第一个 Django 项目, 第六部分 这一篇从第五部分(zh)结尾的地方继续讲起.再上一节中我们为网络投票程序编写了测试,而现在我们要为它加上样式和图片. 除了服务端生成的 HTML 以外,网 ... 
- 利用django创建一个投票网站(五)
		创建你的第一个 Django 项目, 第五部分 这一篇从第四部分(en)结尾的地方继续讲起.我们在前几章成功的构建了一个在线投票应用,在这一部分里我们将其创建一些自动化测试. 自动化测试简介 自动化测 ... 
- 利用django创建一个投票网站(四)
		创建你的第一个 Django 项目, 第四部分 这一篇从第三部分(zh)结尾的地方继续讲起.我们将继续编写投票应用,专注于简单的表单处理并且精简我们的代码. 编写一个简单的表单 让我们更新一下在上一个 ... 
- 利用django创建一个投票网站(三)
		创建你的第一个 Django 项目, 第三部分 这一篇从第二部分(zh)结尾的地方继续讲起.我们将继续编写投票应用,并且聚焦于如何创建公用界面--也被称为"视图". 设计哲学 Dj ... 
- 利用django创建一个投票网站(二)
		创建你的第一个 Django 项目, 第二部分 这一篇从第一部分(zh)结尾的地方继续讲起.本节我们将继续写 Web 投票应用,并主要关注 Django 提供的自动生成的管理页面(admin site ... 
- 利用django创建一个投票网站(一)
		这是教程的原始链接:http://django-intro-zh.readthedocs.io/zh_CN/latest/part1/ 创建你的第一个 Django 项目, 第一部分 来跟着实际项目学 ... 
- Django基础,Day5 - form表单投票详解
		投票URL polls/urls.py: # ex: /polls/5/vote/ url(r'^(?P<question_id>[0-9]+)/vote/$', views.vote, ... 
随机推荐
- XAML中格式化日期
			要求被格式化数据的类型是DateTime StringFormat='yyyy-MM-dd' StringFormat={}{0:yyyy-MM-dd} 
- 新概念 Lesson 3 Nice to meet you
			Nice to meet you. 你好 打招呼: hi,hello 重点: 打招呼和互相介绍.主系表结构 Is Chang-woo Chinese? 昌武是中国人吗? No,he isn't . H ... 
- 2018焦作网络赛Give Candies
			一开始忽略了欧拉定理指数部分是modphi(n-1)没有memset,减法后面没加0: 
- 『Scipy』常用方法记录
			优化器使用教程 J = lambda wb: self.get_cost_grad(wb, X, Y_one_hot) theta = self.wb_init(X,Y_one_hot) result ... 
- ubuntu修改root密码
			1.我们在安装系统的时候我们会把系统的密码设置的比较简单,所以导致后面我们别人很容易操作我们的电脑.所以,我们就可以修改密码,你只要在系统上输入: sudo passwd root 
- OC 方法和函数
			/* 方法 1.对象方法都是以减号 - 2.对象方法的声明必须写在@interface和@end之间 对象方法的实现必须写在@implementation和@end之间 3.对象方法只能由对象来调用 ... 
- OC @property @synthesize和id
			文顶顶 OC语言@property @synthesize和id OC语言@property @synthesize和id 一.@property @synthesize关键字 注意:这两个关键字 ... 
- 利用express.js连接mongodb数据库
			var MongoClient = require('mongodb').MongoClient; var DB_CONN_STR = "mongodb://localhost:27017/ ... 
- RTU命令设置笔记
			YN+12VCTL=1 配置+12V输出控制模式:永久输出YN+5VCTL=1 配置+5V输出控制模式:永久输出 YN+GETDATA 读取采样值 YN++LIST 获取设置参数列表 YN+LOAD ... 
- 玩转X-CTR100 l STM32F4 l 舵机控制
			我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器的舵机控制,X-CTR ... 
