广告
#include <stdio.h>
int main()
{
puts("转载请注明出处[vmurder]谢谢");
puts("网址:blog.csdn.net/vmurder/article/details/43970671");
}
题解
——Silver
f[i][j]表示到第i个跳过了j个的最小值
然后暴力从前转移。
它的时间复杂度是1.25亿,但是常数远远远远小于1
——Bronze
跟银组的一样,只不过改改数组大小,然后m直接赋值1就好了。
银组代码:
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 505
#define INF 0x3f3f3f3f3f3f3f3fll
using namespace std;
long long n,m;
long long f[N][N],x[N],y[N];
int main()
{
freopen("test.in","r",stdin);
cin>>n>>m;
int i,j,k;
for(i=1;i<=n;i++)cin>>x[i]>>y[i];
memset(f,0x3f,sizeof f);
f[1][0]=0;
for(i=2;i<=n;i++)
{
for(j=0;j<i-1&&j<=m;j++)
{
for(k=i-1;i-k-1<=j&&k;k--)
{
f[i][j]=min(f[i][j],f[k][j-(i-k-1)]+abs(x[i]-x[k])+abs(y[i]-y[k]));
}
}
}
long long ans=INF;
for(i=0;i<=m;i++)ans=min(ans,f[n][m]);
cout<<ans<<endl;
return 0;
}
时间: 2024-10-12 09:28:10