20分,六重循环看不懂
#include<bits/stdc++.h>
using namespace std;
int NK[6][10];
int line[6][6][10][10];
int main()
{
int N,M,K;
cin>>N>>M>>K;
for(int i=0;i<N;i++)
{
for(int j=0;j<K;j++)
{
cin>>NK[i][j];
}
}
for(int k=0;k<M;k++)
{
int N1,N2;
cin>>N1>>N2;
for(int i=0;i<K;i++)
{
for(int j=0;j<K;j++)
{
cin>>line[N1][N2][i][j];
}
}
}
int NKCur[6]= {-1,-1,-1,-1,-1,-1};
int Mincost=0x3f3f3f3f;
for(int N5=0;N5<K;N5++)
{
for(int N4=0;N4<K;N4++)
{
for(int N3=0;N3<K;N3++)
{
for(int N2=0;N2<K;N2++)
{
for(int N1=0;N1<K;N1++)
{
for(int N0=0;N0<K;N0++)
{
NKCur[0]=N0;
NKCur[1]=N1;
NKCur[2]=N2;
NKCur[3]=N3;
NKCur[4]=N4;
NKCur[5]=N5;
int NCost=0;
for(int i=0;i<N;i++)
{
NCost+=NK[i][NKCur[i]];
}
int cost=0;
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
cost+=line[i][j][NKCur[i]][NKCur[j]];
}
}
cost+=NCost;
Mincost=min(Mincost,cost);
// if(Mincost==-1)
// Mincost=cost;
// if(cost<Mincost)
// Mincost=cost;
}
}
}
}
}
}
cout<<Mincost<<endl;
}