记录编号 253516 评测结果 AAAAAAAAAA
题目名称 贿赂 最终得分 100
用户昵称 GravatarSky_miner 是否通过 通过
代码语言 C++ 运行时间 0.632 s
提交时间 2016-04-22 11:39:03 内存使用 0.15 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
using namespace std;
#define mod %
void read_int(int &x){
	x=0;char ch;
	while(ch=getchar(),ch<'!');
	while(x=10*x+ch-'0',ch=getchar(),ch>'!');
}
void read_double(double &x){
	x=0;char ch;
	while(ch=getchar(),ch<'!');
	while(x=10*x+ch-'0',ch=getchar(),ch>'!');
}
const int maxn = 10 + 5 ;
double a[maxn],b[maxn],add[maxn],spo[maxn],agai[maxn],ans;
bool l[maxn];
int n,K,A;
double update(){
	int tot=0;
	double ret=1,cnt=0;
	for(int i=1;i<=n;i++){
		if(l[i]){
			ret*=spo[i];	//支持率 
			tot++;
		}
		else {
			ret*=agai[i];
			cnt+=a[i];
		}
	}
	if(tot <= (n>>1)) ret *= (A/(A+cnt)); //物理掉 
 
	return ret;
}
void ca(){
	for(int i=1;i<=n;i++){
		spo[i]=b[i]+add[i];
		if(spo[i] > (double)10) spo[i]= (double)10;
		spo[i]/=(double)10;
		agai[i]=1-spo[i];
	}
	int t,cnt;double ret=0;
	for(int i=0;i<(1<<n);i++){
		t=i;cnt=0;
		while(t){
			l[++cnt]=t mod 2;
			t=t>>1;
		}
		ret+=update();
		memset(l,0,sizeof(l));//就是因为这个东西!!!!!,,,我全Wa了一次 
	}
	if(ret>ans) ans=ret;
}
void DFS(int tot,int pos){
	if(tot>K)return ;
	if(pos==n+1){
		if(tot==K) ca();
		return;
	}
	else{
		for(int i=0;i<=K-tot;i++){
			if(b[pos]+i>(double)10) return;
			add[pos]=i;
			DFS(i+tot,pos+1);
			add[pos]=0;
		}
	}
}
int main(){
	freopen("bribe.in","r",stdin);
	freopen("bribe.out","w",stdout);
	read_int(n),read_int(K),read_int(A);
	for(int i=1;i<=n;i++){
		read_double(a[i]);read_double(b[i]);
		b[i]/=(double)10;
	}
	DFS(0,1);
	printf("%.6lf",ans);
	return 0;
}