Untitled
By: a guest | Mar 20th, 2010 | Syntax:
C++ | Size: 1.29 KB | Hits: 56 | Expires: Never
#include <boost/lambda/lambda.hpp>
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;
int main()
{
vector<int> v;
vector<int> ret;
ret.resize(6);
v.resize(6);
v[0]=0;
v[1]=1;
v[2]=2;
v[3]=3;
v[4]=4;
v[5]=5;
int M1[6] = {6, 115, 47, 118, 19, 34};
int M2[6] = {11, 48, 35, 46, 85, 91 };
int K1[6];
int K2[6];
int min = 1000;
do
{
K1[0]= M1[v[0]];
K1[1]= K1[0] + M1[v[1]];
K1[2]= K1[1] + M1[v[2]];
K1[3]= K1[2] + M1[v[3]];
K1[4]= K1[3] + M1[v[4]];
K1[5]= K1[4] + M1[v[5]];
K2[0] = K1[0] + M2[v[0]];
if(K1[1]<K2[0])
K2[1] = K2[0] + M2[v[1]];
else
K2[1] = K1[1] + M2[v[1]];
if(K1[2]<K2[1])
K2[2] = K2[1] + M2[v[2]];
else
K2[2] = K1[2] + M2[v[2]];
if(K1[3]<K2[2])
K2[3] = K2[2] + M2[v[3]];
else
K2[3] = K1[3] + M2[v[3]];
if(K1[4]<K2[3])
K2[4] = K2[3] + M2[v[4]];
else
K2[4] = K1[4] + M2[v[4]];
if(K1[5]<K2[4])
K2[5] = K2[4] + M2[v[5]];
else
K2[5] = K1[5] + M2[v[5]];
if(K2[5] < min)
{
min=K2[5];
for(int i=0; i<6; ++i)
ret[i]=v[i];
}
}
while(next_permutation(v.begin(), v.end()));
for(int i=0; i<6; ++i)
{
std::cout<<(ret[i]+1)<<std::endl;
}
std::cout<<min<<std::endl;
return 0;
}