正文

zoj 30102009-08-09 11:21:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/hujixiang/46328.html

分享到:

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;
}

阅读(1592) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册