Автор программа: Павел
Код:
#include <iostream>
#include <fstream>
using namespace std;
const int maxn = 100;
int ff[maxn][maxn];
int x1,y1,x2,y2;
int f(int x, int y){
if (ff[x][y]!= -1)
return ff[x][y];
int res = x*y;
if (x>x1)
res = min(res, f(x1,y)+f(x-x1,y));
if (x>y1)
res = min(res, f(y1,y)+f(x-y1,y));
if (x>x2)
res = min(res, f(x2,y)+f(x-x2,y));
if (x>y2)
res = min(res, f(y2,y)+f(x-y2,y));
if (y>y1)
res = min(res, f(x,y1)+f(x,y-y1));
if (y>x1)
res = min(res, f(x,x1)+f(x,y-x1));
if (y>y2)
res = min(res, f(x,y2)+f(x,y-y2));
if (y>x2)
res = min(res, f(x,x2)+f(x,y-x2));
return res;
}
int main()
{
ifstream fin("input.txt");
ofstream fout("output.txt");
int x,y;
int a[6];
if(fin.is_open()){
for(int i=0;i<6;i++)
fin>>a[i];
x=a[0];
y=a[1];
x1=a[2];
y1=a[3];
x2=a[4];
y2=a[5];
}
for (int i=0;i<=x;i++)
for (int j=0;j<=y;j++)
ff[i][j]=-1;
ff[x1][y1]=0;
ff[x2][y2]=0;
ff[y1][x1]=0;
ff[y2][x2]=0;
fout<<f(x,y)<<endl;
return 0;
}
Программа работает нормально для малых массивы, Например:
x==40
y==50
x1==5
y1==6
x2==7
y2==8
выходных данных: 0
x==3
y==100
x1==2
y1==8
x2==3
y2==6
выходных данных: 12;
Но оценка очень плохо!!!!!!!!!!! Как можно быстрее? У кого есть лучщий алгоритм?