披萨大师
兰桂坊附近有一家成都最好吃的披萨店,店主善于创新,经常推出新的口味。一时间,这家小店声名远扬,吸引无数好吃嘴前来尝鲜,膜拜披萨大师。
披萨大师制作披萨时可能会用到N种原材料,分别标记为1到N。如果任何一种原料都可以和1到N中的所有原料混合,那是最简单不过了。但是,在大师的配料清单上清晰的记录了M组不能混合的原料组合(混合后可能中毒或者超级难吃)。大师想知道:利用已有的原材料最多能制作出多少种披萨?(两张披萨不同是指原料i在一种披萨上,而不在另一种披萨上。)
请你编程帮助披萨大师解决这个问题。
输入
第1行包括两个整数N和M。
接下来M行,每行包括两个不同的数字a和b。表示不能混合的两种原料编号。数据保证a和b不同,有些组合可能出现多次。
输出
仅包含1行,输出N中原料最多能够制作出的披萨种数。
样例输入
3 2
1 2
2 3
样例输出
5
提示
样例1说明:披萨大师可以选择的原料组合是(),(1),(2),(3),(1,3)。注意:不使用原料也可以制作一种披萨。
对于100%的数据1 <= N <= 20,1 <= M <= 400,(1 <= a,b <= N)
#include <bits/stdc++.h>
using namespace std;
int m,n,ans,x[25];
bool v[26][26];
bool check(int k,int p)
{
for(int i=1;i<=k;i++)
{
if(v[p][x[i]]==1)
{
return false;
}
}
return true;
}
void dfs(int k,int last)
{
ans++;
for(int i=last+1;i<=n;i++)
{
if(check(k,i)==true)
{
x[k+1]=i;
dfs(k+1,i);
}
}
}
int main()
{
cin >> n >> m;
for(int i=1;i<=m;i++)
{
int a,b;
cin >> a >> b;
v[a][b]=1;
v[b][a]=1;
}
dfs(0,0);
cout << ans;
return 0;
}
本文来自小默的博客,转载请注明原文链接:https://www.cnblogs.com/momotrace/p/psds.html