#include #include #include #include #include #include #include #include using namespace std; struct point { double x, y; point(double _x=0, double _y=0): x(_x), y(_y) {} }; inline double dist(const point &a, const point &b) { return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); } double calpenality(const vector &rgz, int bits, double a, double b) { bitset<11> ison(bits); double penality = 0; for (unsigned int i = 0; i < rgz.size(); ++i) { for (unsigned int j = i+1; j < rgz.size(); ++j) { if (ison[i] == ison[j]) { penality += a*dist(rgz[i], rgz[j]); } else { penality += -b*dist(rgz[i], rgz[j]); } } } return penality; } double calchange(int numa, int numb, double c) { const bitset<11> a(numa), b(numb); double penality = 0; for (unsigned int i = 0; i < a.size(); ++i) if (a[i] != b[i]) penality += c; return penality; } int main(int, char**) { ifstream ifile("zebras.in"); int K; ifile>>K; for (int cset = 1; cset <= K; ++cset) { int cz, t; ifile>>cz>>t; double a, b, c; ifile>>a>>b>>c; vector< vector > rgz(t, vector(cz)); for (int ixt = 0; ixt < t; ++ixt) for (int ixz = 0; ixz < cz; ++ixz) ifile>>rgz[ixt][ixz].x>>rgz[ixt][ixz].y; // dp vector< vector > dp(t, vector(1<::max())); vector< vector > basepenality(t, vector(1< > changepenality(1<(1<