记录编号 |
250236 |
评测结果 |
AAAAAAAAAA |
题目名称 |
信号无错传输 |
最终得分 |
100 |
用户昵称 |
Rapiz |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.006 s |
提交时间 |
2016-04-14 18:57:42 |
内存使用 |
0.37 MiB |
显示代码纯文本
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN=100+1;
int n,minn,ans,e[MAXN][MAXN];
int del[MAXN];
char buf[10000],tmp[10000];
void dfs(int u,int now){//考虑u,已经去掉now
if(n-now<minn) return;
else if(u>n){
//更新答案
if(n-now>minn) ans=0,minn=n-now,buf[0]=0;
ans++;
tmp[0]=0;
for(int i=1;i<=n;i++) if(!del[i]) sprintf(tmp+strlen(tmp),"%d ",i);
sprintf(tmp+strlen(tmp),"\n");
strcat(buf,tmp);
}
else if(del[u]) dfs(u+1,now);
else {
//u在方案中
int d=0;
for(int v=1;v<=n;v++) if(e[u][v]) d+=(del[v]==0?1:0),del[v]++;
dfs(u+1,now+d);
for(int v=1;v<=n;v++) if(e[u][v]) del[v]--;
//u不在方案中
del[u]++;
dfs(u+1,now+1);
del[u]--;
}
}
int main(){
freopen("dlj.in","r",stdin);
freopen("dlj.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>e[i][j];
//for(int i=1;i<=n;i++) if(!pre[i]) cutv(i,-1);
dfs(1,0);
cout<<minn<<endl<<ans<<endl<<buf;
}