一道暴力题。
题目传送门
题目意思:
给你一个 5 × 5 5\times5 5×5 的矩阵 g g g,让你构造一个长度为 5 5 5 的序列,使得按照题目给出的方法计算出来的结果最大,输出这个最大值。
思路:
- 使用 dfs 来构造一个序列。
- 按照题目的方法计算,更新最大值。
代码:
#include<bits/stdc++.h>
using namespace std;
int g[10][10];
int ans;
int vis[10];
int a[10];
void dfs(int id)
{
if(id>5)
{//计算
int sum=g[a[1]][a[2]]+g[a[2]][a[1]]+g[a[3]][a[4]];
sum+=g[a[4]][a[3]]+g[a[2]][a[3]]+g[a[3]][a[2]];
sum+=g[a[4]][a[5]]+g[a[5]][a[4]]+g[a[3]][a[4]];
sum+=g[a[4]][a[3]]+g[a[4]][a[5]]+g[a[5]][a[4]];
ans=max(ans,sum);//更新
return;
}
for(int i=1;i<=5;i++)
{
if(vis[i])continue;//用过就跳过
vis[i]=1;//标记
a[id]=i;//放入序列
dfs(id+1);
vis[i]=0;//回溯
a[id]=0;
}
}
int main()
{
for(int i=1;i<=5;i++)
for(int j=1;j<=5;j++)
cin>>g[i][j];
dfs(1);
cout<<ans;
return 0;
}
完美撒花~