1 条题解
-
0
数据小,暴搜。。。
#include<bits/stdc++.h> using namespace std; int n,t,m,a[110],b[110],num[110],cnt[110],ans; void dfs(int pos,int now)//pos:现在分了多少个人 { if(n-pos+1<t-now)return;//人不够分了 if(pos>n) { for(int i=1;i<=m;i++)if(num[a[i]]==num[b[i]])return;//"仇人"在同一个队 ans++;//符合要求 return; } for(int i=1;i<=t;i++) { if(cnt[i])//这个队里已经有人 { cnt[i]++; num[pos]=i;//归到这个队 dfs(pos+1,now);//多分了一个人,队没变 cnt[i]--;//回溯 } else//新的一个队 { cnt[i]++; num[pos]=i;//同上 dfs(pos+1,now+1);//多分出了一个人和一个队 cnt[i]--;//回溯 } } } int main() { scanf("%d%d%d",&n,&t,&m); for(int i=1;i<=m;i++)scanf("%d%d",&a[i],&b[i]); dfs(1,0); for(int i=1;i<=t;i++)ans/=i;//没分顺序都算了,除掉 printf("%d\n",ans); return 0; }
- 1
信息
- ID
- 8902
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 6
- 标签
- 递交数
- 54
- 已通过
- 19
- 上传者