90分求助
查看原帖
90分求助
82853
恐怖编程黑客楼主2021/2/26 21:36
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
using namespace std;
#define N 100005
long long p[2001][2001],q[2001][2001],n,c[2001],ans;
bool vis[2001];
void dfs(long long x,long long tot){
	if(x>n){
		ans=max(ans,tot);
		return ;
	}
	long long op=0;
	for(long long i=x;i<=n;i++)op+=c[i];
	if(ans>op+tot)return ;
	for(long long i=1;i<=n;i++){
		if(!vis[i]){
			vis[i]=1;
			dfs(x+1,tot+p[x][i]*q[i][x]);
			vis[i]=0;
		}
	}
}
int main(){
	cin>>n;
	for(long long i=1;i<=n;i++){
		for(long long j=1;j<=n;j++)cin>>p[i][j];	
	}
	for(long long i=1;i<=n;i++){
		for(long long j=1;j<=n;j++)cin>>q[i][j];
	}
	for(long long i=1;i<=n;i++){
		for(long long j=1;j<=n;j++)c[i]=max(c[i],p[i][j]*q[i][j]);
	}
	dfs(1,0);
	cout<<ans;
}

/*
Input:
3
10 2 3
2 3 4
3 4 5
2 2 2
3 5 3
4 5 1
==================
Output:
52
*/

只错了一个点,求助qwq

2021/2/26 21:36
加载中...