标签:ace i++ 说明 name turn 出现 sed 计算 event
南海的最大比萨店为即将来临的节日准备了T种不同加味的原料,但考虑到南海人的口味和其它一些因素,原料的使用有N种限制。
T种不同原料的编号为1...T。一个限制如“5 3”即表示5号和3号加味原料不能同时使用。如此,此时使用三种原料3,5,6的比萨是不允许的。
现在请你帮忙计算在上面条件下,最多可以制作多少不同的比萨(包括不添加任何加味原料的)。
第一行,两个整数:T和N。
下面有N行,每行表示一种限制。每行的第一个整数Z(1≦Z≦T)表示这行后面有Z个表示原料编号的整数,这些原料不能同时出现在一个比萨中。
一行,一个整数表示在上面的限制下最多可以制成多少种不同比萨。
6 5
1 1
2 4 2
3 3 2 6
1 5
3 3 4 6
10
共以下十种答案:无加料;2;2和3;2和6;3;3和4;3和6;4;4和6;6。
枚举每一种配料是否出现即可。
#include<iostream> using namespace std; int t,n; int temp,r[100][100]; int num,a[100],judge; bool flag=true; int main() { cin>>t>>n; for(int i=1;i<=n;i++) { cin>>temp; for(int j=1;j<=temp;j++) { cin>>r[i][j]; } } while(!a[0]) { if(flag) { num++; } flag=true; for(int i=t;i>=0;i--) { if(a[i]) { a[i]=0; } else { a[i]=1; break; } } for(int i=1;i<=n;i++) { if(!r[i][2]) { if(a[r[i][1]]) { flag=false; break; } } else { for(int j=1;;j++) { if(!a[r[i][j]]) { break; } else if(!r[i][j+1]) { flag=false; break; } } if(!flag) break; } } } cout<<num; return 0; }
标签:ace i++ 说明 name turn 出现 sed 计算 event
原文地址:https://www.cnblogs.com/kcn999/p/10463701.html