#include #include #include #include #include #include #include using namespace std; int n,niz[405],tip1,tip2,post[405][405],prit[405][405],tempniz[405],maxscore,niz1[405]; struct slog{ int vr,idx; }x,y,x2,y2; vector> v,tempv,oldtempv; pair> p[160010]; void unos(){ scanf("%d", &n); for(int i=1;i<=n;i++) scanf("%d", &niz[i]); scanf("%d", &tip1); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ scanf("%d", &post[i][j]); } } scanf("%d", &tip2); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ scanf("%d", &prit[i][j]); } } } bool check(){ //for(int i=1;i<=n;i++) cout<tempniz[i]) return false; } return true; } int score(){ int sc=0; for(int i=0;i=1;i--){ if(tempniz[i]!=i){ x.vr=tempniz[i]; x.idx=i; y.vr=tempniz[tempniz[i]]; y.idx=tempniz[i]; tempv.push_back(make_pair(x,y)); swap(tempniz[i],tempniz[tempniz[i]]); i++; } } sc=score(); if(sc=1;i--){ if(tempniz[i]!=i){ x.vr=tempniz[i]; x.idx=i; y.vr=tempniz[tempniz[i]]; y.idx=tempniz[i]; tempv.push_back(make_pair(x,y)); swap(tempniz[i],tempniz[tempniz[i]]); } } } sc=score(); if(sc=1;i--){ if(tempniz[i]!=i){ int mincena=post[i][tempniz[i]]+prit[tempniz[i]][tempniz[tempniz[i]]]; int cena=0; int k1=0; for(int k=1;k<=i-1;k++){ cena=post[tempniz[i]][k]+prit[tempniz[tempniz[i]]][tempniz[k]]+post[tempniz[i]][i]+prit[tempniz[i]][tempniz[k]]; if(cena1;i--){ if(tempniz[i]!=i){ for(int j=i-1;j>=1;j--){ if(tempniz[j]==i){ x.vr=tempniz[i]; x.idx=i; y.vr=tempniz[j]; y.idx=j; tempv.push_back(make_pair(x,y)); swap(tempniz[i],tempniz[j]); break; } } } } sc=score(); if(sc