记录编号 44675 评测结果 AAAAAAAA
题目名称 王伯买鱼 最终得分 100
用户昵称 GravatarTruth.Cirno 是否通过 通过
代码语言 C++ 运行时间 0.060 s
提交时间 2012-10-19 17:13:04 内存使用 3.15 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <memory.h>
using namespace std;

struct bootype
{
	bool boo[50];
}rec,maxrec,unanow,una[50];

int n,lim,maxget,maxcost[50],cost[50];

void swap(int& a,int& b)
{
	int temp;
	temp=a;
	a=b;
	b=temp;
}

void dfs(int deep,bool get,int getnum,int costnow)
{
	if (n-deep+getnum<maxget)
		return;
	if (deep==n)
	{
		if (maxget<=getnum)
		{
			maxget=getnum;
			if (maxcost[maxget]<costnow)
			{
				maxcost[maxget]=costnow;
				maxrec=rec;
			}
		}
		return;
	}
	if (!unanow.boo[deep+1])
		if (costnow+cost[deep+1]<=lim)
		{
			bootype temp;
			temp=unanow;
			for (int i=1;i<=n;i++)
				unanow.boo[i]=unanow.boo[i]|una[deep+1].boo[i];
			rec.boo[deep+1]=true;
			dfs(deep+1,1,getnum+1,costnow+cost[deep+1]);
			rec.boo[deep+1]=false;
			unanow=temp;
		}
	dfs(deep+1,0,getnum,costnow);
}

int main(void)
{
	freopen("fish.in","r",stdin);
	freopen("fish.out","w",stdout);
	int i,temp,temp2;
	scanf("%d%d",&lim,&n);
	for (i=1;i<=n;i++)
	{
		scanf("%d%d",&temp,&temp2);
		cost[temp]=temp2;
	}
	while (scanf("%d%d",&temp,&temp2)==2)
	{
		una[temp].boo[temp2]=true;
		una[temp2].boo[temp]=true;
	}
	if (cost[1]<=lim)
	{
		for (i=1;i<=n;i++)
			unanow.boo[i]=unanow.boo[i]|una[1].boo[i];
		rec.boo[1]=true;
		dfs(1,1,1,cost[1]);
		rec.boo[1]=false;
		memset(unanow.boo,0,sizeof(unanow.boo));
	}
	dfs(1,0,0,0);
	printf("%d %d\n",maxget,maxcost[maxget]);
	for (i=1;i<=n;i++)
		if (maxrec.boo[i])
			printf("%d\n",i);
	return(0);
}