给定 n 和 n×n 个整数,请求出对于给出的矩阵,选择 n 个不同行不同列的整数并计算他们的和,对于每一个可行的和,输出最大值。
范围:1≤n≤20,1≤aij≤100
因为范围超时的代码:
#include<bits/stdc++.h>
using namespace std;
int n;int lit[25];int tot(-2147483647);
int huo[25][25],r[25];bool vis[25];
void pmt(int ceng)
{
if(ceng==n+1)
{
int tmp(0);
for(int i=1;i<=n;++i)
tmp+=huo[i][lit[i]];
tot=max(tot,tmp);return;
}
else
{
for(int i=1;i<=n;++i)
if(vis[i]==false)
{
vis[i]=true;
lit[ceng]=i;
pmt(ceng+1);
vis[i]=false;
}
}
}
int main()
{
cin>>n;
for(int i=0;i<n;++i)r[i]=i+1;
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
cin>>huo[i][j];
pmt(1);cout<<tot;
}
看来暴力枚举排列不行,求各位大佬,谁能帮我改一下?