求助题目
  • 板块学术版
  • 楼主BearBig
  • 当前回复5
  • 已保存回复5
  • 发布时间2022/6/26 12:25
  • 上次更新2023/10/27 22:32:36
查看原帖
求助题目
668599
BearBig楼主2022/6/26 12:25

给定 nnn×nn \times n 个整数,请求出对于给出的矩阵,选择 nn 个不同行不同列的整数并计算他们的和,对于每一个可行的和,输出最大值。
范围:1n20,1aij1001 \le n \le 20,1 \le a_{i_j} \le 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;
}

看来暴力枚举排列不行,求各位大佬,谁能帮我改一下?

2022/6/26 12:25
加载中...