bzoj3892[Usaco2014 Dec]Marathon*】的更多相关文章

bzoj3892[Usaco2014 Dec]Marathon 题意: 在二维平面上有N个点,从(x1,y1)到(x2,y2)的代价为|x1-x2|+|y1-y2|.求从1号点出发,按从1到N的顺序依次到达每个点的最小总代价.你有K次机会可以跳过某个点,不允许跳过1号点或N号点.n≤500. 题解: dp.f[i][j]表示当前在i个点,剩j次,则f[i][j]=min(f[i+1][j]+abs(x[i+1]-x[i])+abs(y[i+1]-y[i]),f[i+k+1][j-k]),i+k+…
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…
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…
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…
Cow Jog bzoj-3893 Usaco-2014 Dec 题目大意:题目链接. 注释:略. 想法: 先按照坐标排序. 我们发现每个牛只会被后面的牛影响. 所以我们考虑逆向枚举. 记录一下i+1~n的牛最近能到哪,然后判断一下当前的第i头牛能不能比那个值大就行了. 如果比那个值大,就说明当前牛能跟后面的牛合并. 如果当前的值比后面的值小,说明当前的牛是一群牛的开头. 最后,附上丑陋的代码..... #include <iostream> #include <cstdio> #…
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的最…
Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 302  Solved: 157 Description The cows are out exercising their hooves again! There are N cows jogging on an infinitely-long single-lane track (1 <= N <= 100,000). Each cow starts at a distinct position…
不跳过任何点的路程=dis(l,l+1)+dis(l+1,l+2)+...+dis(r-2,r-1)+dis(r-1,r) 要跳过一个点i,则要最小化dis(i,i+2)-dis(i,i+1)-dis(i+1,i+2) 于是用线段树支持单点修改.区间查询和以及最小值即可 #include<cstdio> #define N 100010 int n,m,i,j,loc[N][2],vs[N<<2],vm[N<<2];char op[5]; inline int abs(…
设f[s]为已经从上到下叠了状态为s的牛的最大稳定度,转移的话枚举没有在集合里并且强壮度>=当前集合牛重量和的用min(f[s],当前放进去的牛还能承受多种)来更新,高度的话直接看是否有合法集合的高度达到要求即可 #include<iostream> #include<cstdio> using namespace std; const int N=25; int n,m,h[N],w[N],a[N],f[2000005],ans=-1; int main() { scanf…
bzoj上的usaco题目还是很好的(我被虐的很惨. 有必要总结整理一下. 1592: [Usaco2008 Feb]Making the Grade 路面修整 一开始没有想到离散化.然后离散化之后就很好做了.F[I,j]表示第i个点,高度>=j或<=j,f[I,j]=min(f[i-1,j]+abs(b[j]-a[i]),f[I,j-1]) 1593: [Usaco2008 Feb]Hotel 旅馆 线段树 ★1594: [Usaco2008 Jan]猜数游戏 二分答案然后写线段树维护 15…