记录编号 160063 评测结果 AAAAAAAAAAAAAAA
题目名称 马拉松2 最终得分 100
用户昵称 Gravatarslyrabbit 是否通过 通过
代码语言 C++ 运行时间 0.436 s
提交时间 2015-04-23 18:13:58 内存使用 1.29 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
class node
{
public:
	int x;
	int y;
}a[505];
int f[505][505]={0},n,K;
void init()
{
	cin>>n>>K;
	for(int i=1;i<=n;i++)
	{
	    cin>>a[i].x>>a[i].y;
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<=K;j++)
		{
			f[i][j]=9999999;
		}
	}
	for(int i=0;i<=K;i++) f[1][i]=0;
}
int main()
{
	freopen("marathonb.in","r",stdin);
	freopen("marathonb.out","w",stdout);
	init();
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<=K;j++)
		{
			if(j>=i-1) break;
			for(int k=j;k>=0;k--)
			{
				if(k>=i-1) continue;
				if(f[i-1-k][j-k]+abs(a[i].x-a[i-k-1].x)+abs(a[i].y-a[i-k-1].y)<f[i][j])
					f[i][j]=f[i-1-k][j-k]+abs(a[i].x-a[i-k-1].x)+abs(a[i].y-a[i-k-1].y);
			}
		}
	}
	int MIN=9999999;
	for(int i=0;i<=K;i++)
	{
		if(MIN>f[n][i])
			MIN=f[n][i];
	}
	cout<<MIN;
	return 0;
}