[bzoj3892] [Usaco2014 Dec]Marathon

  瞎DP一波。

  f[i][j]:表示已到达或跳过前i个点,总共跳了j个点,并且目前在第i个点的最小总代价。

  f[i][j]=min{ f[k][j-(i-k-1)] }+dis(k,i),(dis(k,i)表示两点间距离。

  时间复杂度O(n^3)本来以为过不了的。。

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 const int maxn=503;
 7 int x[maxn],y[maxn],dis[maxn][maxn];
 8 int f[maxn][maxn];
 9 int i,j,k,n,m,kk,ans;
10
11 int ra,fh;char rx;
12 inline int read(){
13     rx=getchar(),ra=0,fh=1;
14     while((rx<‘0‘||rx>‘9‘)&&rx!=‘-‘)rx=getchar();
15     if(rx==‘-‘)fh=-1,rx=getchar();
16     while(rx>=‘0‘&&rx<=‘9‘)ra*=10,ra+=rx-48,rx=getchar();return ra*fh;
17 }
18 inline int abs(int x){return x<0?-x:x;}
19 inline int min(int a,int b){return a<b?a:b;}
20 int main(){
21     n=read(),kk=read();
22     for(i=1;i<=n;i++){
23         x[i]=read(),y[i]=read();
24         for(j=1;j<i;j++)dis[j][i]=abs(x[i]-x[j])+abs(y[i]-y[j]);
25     }
26     memset(f,60,sizeof(f));
27     f[1][0]=0;
28     for(i=2;i<=n;i++)for(j=0;j<=kk;j++)
29         for(k=max(i-j-1,1);k<i;k++)f[i][j]=min(f[i][j],f[k][j-(i-k-1)]+dis[k][i]);
30     for(i=1,ans=f[n][0];i<=k;i++)ans=min(ans,f[n][i]);
31     printf("%d\n",ans);
32 }

时间: 2024-10-13 03:16:50

[bzoj3892] [Usaco2014 Dec]Marathon的相关文章

3892: [Usaco2014 Dec]Marathon

3892: [Usaco2014 Dec]Marathon Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 169  Solved: 100[Submit][Status][Discuss] Description Unhappy with the poor health of his cows, Farmer John enrolls them in an assortment of different physical fitness acti

BZOJ 3892 Usaco2014 Dec Marathon DP

题目大意:给出平面上的一些点,要求按顺序遍历,费用是两点之间的曼哈顿距离,可以跳过k次,问最少需要花费多少. 思路:O(n^3)dp就行了. CODE: #define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define MAX 510 using namespace std; struct

BZOJ 3892 [Usaco2014 Dec]Marathon 动态规划

题目大意:给定n个点,定义从一个点到另一个点的距离为曼哈顿距离,要求从点1依次走到点n,中途可以跳过k个点不走,求最小距离和 令f[i][j]表示从第一个点走到第i个点中途跳过j次的最小距离和 则有f[i][j]=min{f[i-k-1][j-k]+dis[i-k-1][i]} 时间复杂度O(n^3) #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #

3891: [Usaco2014 Dec]Piggy Back

3891: [Usaco2014 Dec]Piggy Back Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 116  Solved: 92[Submit][Status][Discuss] Description Bessie and her sister Elsie graze in different fields during the day, and in the evening they both want to walk back

3893: [Usaco2014 Dec]Cow Jog

3893: [Usaco2014 Dec]Cow Jog Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 174  Solved: 87[Submit][Status][Discuss] Description The cows are out exercising their hooves again! There are N cows jogging on an infinitely-long single-lane track (1 <= N

bzoj3891[Usaco2014 Dec]Piggy Back*

bzoj3891[Usaco2014 Dec]Piggy Back 题意: 给定一个N个点M条边的无向图,其中Bessie在1号点,Elsie在2号点,它们的目的地为N号点.Bessie每经过一条边需要消耗B点能量,Elsie每经过一条边需要消耗E点能量.当它们相遇时,它们可以一起行走,此时它们每经过一条边需要消耗P点能量.求它们两个到达N号点时最少消耗多少能量.n,m≤40000. 题解: 先求出以1.2.n为源点的最短路(因为边权为1所以用bfs).答案初始设为1到n的最短路*B+2到n的最

【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

BZOJ 3893 Usaco2014 Dec Cow Jog 模拟

题目大意:给出n头牛他们的初始位置和各自的速度,一头牛追上另一头牛之后这两头牛会变成一头牛,问最后剩下几头牛. 思路:简单模拟一下不难发现,我们只要算出如果正常行驶每头牛的最后到达的地点,从后往前扫一下,有多少个单调不减的序列就是最后有多少头牛. CODE: #define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <cstring> #include <iostream> #include <algor

BZOJ 3891 Usaco2014 Dec Piggy Back BFS

题目大意:给出一张无向图,有两个人,分别在1和2,他们要到n,一个人走的消耗是c1,c2,两个人一起走是c3,问最少消耗. 思路:题中说是可以一起走,而不是必须一起走,所以之需要看这两个人到所有点的距离,还有每个点到终点的距离,之后枚举从那个点开始一起走,求一下最小值就可以了. CODE: #define _CRT_SECURE_NO_WARNINGS #include <queue> #include <cstdio> #include <cstring> #incl