类似八皇后,暴力深搜。
其实我觉得这题目叙述不是很好,如果答案为0呢,难道不输出?
AC代码:
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=11; int vis[maxn],d[maxn][maxn]; int ans; int n; int dfs(int sum,int cur){ if(cur==n) return sum; for(int i=0;i<n;++i){ //枚举列 if(vis[i]) continue; vis[i]=1; ans=max(ans,dfs(sum+d[cur][i],cur+1)); vis[i]=0; } return ans; } int main(){ while(scanf("%d",&n)==1){ memset(vis,0,sizeof(vis)); ans=-(1<<30); for(int i=0;i<n;++i) for(int j=0;j<n;++j) scanf("%d",&d[i][j]); printf("%d\n",dfs(0,0)); } return 0; }
如有不当之处欢迎指出!