DFS,规模很小,直接搜过
#include<iostream>
using namespace std;
int n;
double sum,m;
bool mark[11],escape;
struct vex
{
int num,count[11];
double per;
}a[12];
void dfs(int si,int num,double max)
{
int total=0,i;
double temp;
if(num==n)
{
if(max>sum)sum=max;
escape=1;
return;
}
if(si==n+1)return;
for( i=1;i<=a[si].num;i++)
{
if(mark[a[si].count[i]]){mark[a[si].count[i]]=0;total++;}
else {mark[a[si].count[i]]=1;total--;}
}
temp=max;
max=max*(1-(a[si].per/100));
dfs(si+1,num+total,max);
total=0;
for(i=1;i<=a[si].num;i++)
{
if(mark[a[si].count[i]])mark[a[si].count[i]]=0;
else mark[a[si].count[i]]=1;
}
dfs(si+1,num,temp);
}
int main()
{
int i,j;
while(cin>>n>>m &&(n))
{
escape=0;
memset(mark,1,sizeof(mark));
for(i=1;i<=n;i++)
{
cin>>a[i].num;
for(j=1;j<=a[i].num;j++)
cin>>a[i].count[j];
a[i].count[j]=i;
a[i].num++;
cin>>a[i].per;
}
sum=0;
dfs(1,0,m);
if(escape)printf("%.2lf\n",sum);
else printf("-1\n");
}
return 0;
}
正文
zoj 30102009-08-09 11:21:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/hujixiang/46328.html
阅读(1592) | 评论(0)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
评论