poj2374 Fence Obstacle Course[线段树+DP]】的更多相关文章

https://vjudge.net/problem/POJ-2374 吐槽.在这题上面磕了许久..英文不好题面读错了qwq,写了个错的算法搞了很久..A掉之后瞥了一眼众多julao题解,**,怎么想的方法都比我简单,码量还小?太菜了太菜了,把自己烂方法记下来滚了. 题意内容说简单点其实就跟小时候玩的森林冰火人差不多..看成一个小人从最顶层平台上开始,走到边缘会掉下去,直到落在一个平台或者底部,再继续左或右走.给n层的每层平台起讫点坐标,求x轴方向最小移动距离. 先想到设计状态$f[i][0/1…
Fence Obstacle Course Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 2524   Accepted: 910 Description Farmer John has constructed an obstacle course for the cows' enjoyment. The course consists of a sequence of N fences (1 <= N <= 50,0…
[题目链接] http://www.tsinsen.com/A1219 [题意] 给定一棵树,a[u][i]代表u结点分配i人的收益,可以随时改变a[u],查询(u,v)代表在u子树的所有节点,在u->v(不含u)路径上的节点分配人数的最优收益. [思路] 树链剖分:构造重链时先访问重儿子,因此一个重链的区间连续,同时一个子树的区间连续. 查询分为两部分:构造在u子树内分配人数i的最大收益ans1[i],以及构造在u->v路径上一个结点分配人数i的最大收益ans2[i].则ans=max{ a…
HDU 3016 Man Down (线段树+dp) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1391    Accepted Submission(s): 483 Problem Description The Game “Man Down 100 floors” is an famous and interesting ga…
题目链接 POJ2374 题解 题意: 给出\(n\)个平行于\(x\)轴的栅栏,求从一侧栅栏的某个位置出发,绕过所有栅栏到达另一侧\(x = 0\)位置的最短水平距离 往上说都是线段树优化dp 我写了一个奇怪的线段树过了,似乎并没有和dp沾边 因为每次都是从某个栅栏的端点出发,到达某个位置的值等于[所有这些可出发的端点已产生的代价 + 到达这个点的距离] 的最小值 就用线段树维护每个区间 \(lm[u]\)表示在这个区间内的端点到达左端点的最小代价 \(rm[u]\)表示到右端点的最小代价 然…
题意 Language:Default Fence Obstacle Course Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 2900 Accepted: 1042 Description Farmer John has constructed an obstacle course for the cows' enjoyment. The course consists of a sequence of N fences…
我们可以想到一个dp方程:f[i][0]表示当前在i个栅栏的左端点,f[i][1]表示在右端点. 分两种情况: 第一种:假设现在要更新线段gh的左端点g,而它下来的路径被ef挡住了,那么必定是有ef来更新g. 为什么呢?因为其它点走到g必定要下落,比如说d到g,就相当于d到f再到g. 第二种:假设到ab的路径上没有东西挡着,那就可以直接从源点走过去再直接下落. 按照从上到下的顺序插入线段,线段树就是找当前的某个点被哪条id最大(也就是最低的)线段所覆盖. #include<cstdio> #i…
//Accepted 7552 KB 844 ms //dp[i]=sum(dp[j])+1 j<i && a[j]<a[i] //可以用线段树求所用小于a[i]的dp[j]的和 //需要离散化 #include <cstdio> #include <cstring> #include <iostream> #include <queue> #include <cmath> #include <algorithm…
题目链接:http://codeforces.com/contest/474/problem/F 意思是给你两个数n和d,下面给你n座山的高度. 一个人任意选择一座山作为起始点,向右跳,但是只能跳到高度差的绝对值大于等于d的山上. 问跳过的最长路径是什么. 设dp[h[i]]是跳到第i座山的最长路径长度. 那么dp[h[i]] = max( dp[h[j]] ) + 1  ( |h[i]-h[j]| >=d && i>j ) 因为要查询区间最大值,所以考虑用线段树实现. 从左向…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3872 题意:有n个龙珠按顺序放在一列,每个龙珠有一个type和一个权值,要求你把这n个龙珠分成k个段,每段的权值是这段中的最大的权值,使得最后的权值之和最小.但是现在有个要求,分的段中,龙珠的type不能和最右边的相等. 容易想到是一个DP:f[i]=Min{f[j]+Min(j,i) | j是满足要求的点}.直接搞的话O(n^2),显然超时了.但是可以发现,这个Min(j,i)是有分段性的,因此我…