【BZOJ3892】【Usaco2014 Dec】Marathon (Silver and Bronze) 暴力动规

广告

#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;
}

你可能感兴趣的:(动态规划,marathon,Usaco2014,BZOJ3892)