记录编号 50485 评测结果 EEEEEEEEEE
题目名称 [NOIP 2012]国王游戏 最终得分 0
用户昵称 Gravatarcqw 是否通过 未通过
代码语言 C++ 运行时间 0.718 s
提交时间 2012-11-23 10:00:46 内存使用 0.32 MiB
显示代码纯文本
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
using namespace std;
struct node
{
	int a,b;
}D[1005],K;
int cmp(const void* a,const void* b)
{
	node *p=(node*)a;
	node *q=(node*)b;
	int max1,max2;
	max1=max(q->b,p->b*q->a);
	max2=max(p->b,q->b*p->a);
	if(max1==max2) return p->a-q->a;
	return max1-max2;
}
int ans;
int Count=0;
int used[1005];
void dfs(int mul,int d,int n,int val)
{
	if(val>ans) return ;
	if(d==n)
	{
		ans=val;
		return ;
	}
	if(++Count>100000) return;
	for(int i=0;i<n;i++)
	{
		if(!used[i])
		{
			used[i]=1;
			dfs(mul*D[i].a,d+1,n,max(val,mul/D[i].b));
			used[i]=0;
		}
	}
}
int main()
{
	freopen("game.in","r",stdin);
	freopen("game.out","w",stdout);
	int n;
	scanf("%d",&n);
	scanf("%d%d",&K.a,&K.b);
	for(int i=0;i<n;i++)
	{
		scanf("%d%d",&D[i].a,&D[i].b);
		used[i]=0;
	}
	qsort(D,n,sizeof(node),cmp);
	ans=0;
	int mul=1;
	for(int i=0;i<n;i++)
	{
		int k=mul*K.a/D[i].b;
		if(ans<(mul*K.a)/D[i].b) ans=(mul*K.a)/D[i].b;
		mul*=D[i].b;
	}
	Count=0;
	dfs(K.a,0,n,0);
	printf("%d\n",ans);
}