比赛 20161223 评测结果 AAAAAAAAAA
题目名称 萌化大革命 最终得分 100
用户昵称 Mealy 运行时间 0.070 s
代码语言 C++ 内存使用 9.33 MiB
提交时间 2016-12-23 23:25:55
显示代码纯文本
#include <iostream>
#include <cstdio>
#define A 0
#define B 1


using namespace std;

const int nmax=1086;
const int INF=1<<29;

int n,m;

class point
{
public:
	int x,y;
};

point a[nmax];
point b[nmax];


int f[nmax][nmax][2]={0};


void PreDo()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d",&a[i].x,&a[i].y);
	}
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d",&b[i].x,&b[i].y);
	}
}

int Sqr(int x)
{
	return x*x;
}

int Len(point a,point b)
{
	return Sqr(a.x-b.x)+Sqr(a.y-b.y);
}


void DP()
{
	for(int i=0;i<=n;i++)
	{
		for(int j=0;j<=m;j++)
		{
			for(int k=0;k<=1;k++)
			{
				f[i][j][k]=INF;
			}
		}
	}
	
	f[1][0][A]=0;
	for(int i=1;i<=n;i++)
	{
		f[i][0][A]=min(f[i][0][A],f[i-1][0][A]+Len(a[i],a[i-1]));
		for(int j=1;j<=m;j++)
		{
			f[i][j][A]=min(f[i-1][j][A]+Len(a[i-1],a[i]),f[i-1][j][B]+Len(b[j],a[i]));
			f[i][j][B]=min(f[i][j-1][A]+Len(a[i],b[j]),f[i][j-1][B]+Len(b[j-1],b[j]));
        }
    }
    printf("%d\n",f[n][m][A]);
}

int main()
{
	freopen("checklist.in","r",stdin);
	freopen("checklist.out","w",stdout);
	PreDo();
	DP();
	return 0;
}
	
	
	
	
	
	
	
	
	
	
	
	
	
/*
2574. [USACO Dec16]萌化大革命
★★☆   输入文件:checklist.in
*/