深度优先搜索。
#include<cstdio>
#include<cstring>
using namespace std;
int n,t,ans; bool tg[101];
struct node{int len; bool b[101];
}a[101];bool ok(int lgg)//这个方案是否可行
{for (int j=1;j<=n;j++){int sum=0; for (int i=1;i<=t;i++)if (tg[i]&&a[j].b[i]) sum++; //不能一起的都有时,就返回falseif (sum==a[j].len) return false; }return true; //否则返回true
}void dfs(int lle)
{ ans++; //累加方案数for (int i=lle+1;i<=t;i++)//去重,或者用hash{tg[i]=true;if (ok(i)) dfs(i);tg[i]=false; }
}
int main()
{freopen("pizza.in","r",stdin); freopen("pizza.out","w",stdout); scanf("%d%d",&t,&n); for (int i=1;i<=n;i++){scanf("%d",&a[i].len); int q; for (int j=1;j<=a[i].len;j++)scanf("%d",&q),a[i].b[q]=true;//读入&&初始化}dfs(0); //搜到第几位printf("%d",ans); //输出
}
本文发布于:2024-01-29 18:18:23,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170652350517363.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |