18pts求助!玄关!
查看原帖
18pts求助!玄关!
1198296
封禁用户楼主2023/12/16 09:59
#include<bits/stdc++.h>
using namespace std;
#define int long long
int dp[25][(1<<20)+5],p[25][25],q[25][25],num[(1<<20)+5]; 
signed main(){
	int n;
	scanf("%lld",&n);
	int x=1<<n;
	for(int i=0;i<x;++i){
		int sum=0,qaz=i;
		while(qaz){
			if(qaz&1) ++sum;
			qaz>>=1;
		}
		num[i]=sum;
	}
	for(int i=1;i<=n;++i){
		for(int j=1;j<=n;++j){
			scanf("%lld",&p[i][j]);
		}
	}for(int i=1;i<=n;++i){
		for(int j=1;j<=n;++j){
			scanf("%lld",&q[i][j]);
		}
	}for(int i=1;i<=n;++i){
		for(int j=1;j<(1<<n);++j){
			if(i==num[j]){
				for(int d=1;d<=n;++d){
					if(j&(1<<(d-1))) dp[i][j]=max(dp[i][j],dp[i-1][j^(1<<d-1)]+p[i][d]*q[i][d]);
				}
			}
		}
	}cout<<dp[n][(1<<n)-1]<<endl;
	return 0;
}
2023/12/16 09:59
加载中...