poj 2078 Matrix
#include<iostream> //搜索题
using namespace std;
int n,table[10][10],m,s,mx;
void backtrack(int r)
{
if(r==n)
{
m=0;
for(int j=0;j<n;++j)
{
s=0;
for(int i=0;i<n;++i)
{
s+=table[i][j];
if(s>=mx) //剪枝
return ;
}
m=max(s,m);
}
mx=min(mx,m);
}
else
{
int t=n;
while(t--)
{
int p=table[r][n-1];
for(int j=n-1;j>0;--j)
table[r][j]=table[r][j-1];
table[r][0]=p;
backtrack(r+1);
}
}
}
int main()
{
while(cin>>n&&n!=-1)
{
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
cin>>table[i][j];
mx=999999;
backtrack(0);
cout<<mx<<endl;
}
return 0;
}