#include #include #include #include #include #include #include using namespace std; ifstream fin("sorting.in"); ofstream fout("sorting.out"); const int N=402, INF=numeric_limits::max(); int n, p[N], backup[N], typeP, typeV; int costP[N][N], costV[N][N]; int getRandom (int i) { return rand()%i; } void init() { fin>>n; for(int i=1; i<=n; ++i) { fin>>p[i]; backup[i]=p[i]; } fin>>typeP; for(int i=1; i<=n; ++i) { for(int j=1; j<=n; ++j) { fin>>costP[i][j]; } } fin>>typeV; for(int i=1; i<=n; ++i) { for(int j=1; j<=n; ++j) { fin>>costV[i][j]; } } } void print(int m[]) { for(int i=1; i<=n; ++i) fout< > answer, bestAnswer; void restore() { answer.clear(); for(int i=1; i<=n; ++i) p[i]=backup[i]; } void selectionSortMin() { counter=0, result=0; int min_idx; for(int i=1; i1; i--) { max_idx=i; for(int j=i-1; j>=1; j--) if(p[j]>p[max_idx]) max_idx=j; swap(p[max_idx], p[i]); if(max_idx!=i) { answer.push_back(make_pair(max_idx, i)); counter++; result+=costP[max_idx][i]+costV[p[max_idx]][p[i]]; } //fout<maxNum) { max_idx=k; maxNum=p[k]; } else if(p[k]