首页 > TAG信息列表 > P3842
P3842 [TJOI2007]线段
每行一个线段,必须要走完,显然可以发现从左往右走完或者从右往左走完是比较优的。从中间往下走浪费步数??(好像可以,但是我理解不来,也找不到有人这样写) 那么是该从左往右还是从右往左呢。我们需要枚举了。这个状态又有最优子结构,这时候需要优雅的暴力--DP。 \(f[i][0]\)表示走完第i行的P3842 [TJOI2007]线段
题意: 有\(n*n\)的区间,你从(1,1)点出发,到达(n,n)点,每一行有条线段,你需要走完每一条线段,问最少需要走几步?(\(n\leq2*10^4\)) 题解: 这是个很裸的\(DP\)(最近重新开始刷\(DP\)),显然开\(n*n\)的区间是开不了的,我们知道,每一行结束的位置一定在每一行线段的左端点或者右端点,即恰好走完这洛谷 P3842 [TJOI2007]线段
题目传送门 f[i][1/0]表示到第i列左右端点的最短路程长度 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> using namespace std; int n,l[20001],r[20001],f[20001][2]; inline int min(int a,int b) { if(a < b) return a; returP3842 [TJOI2007]线段
题目描述 在一个 n*n 的平面上,在每一行中有一条线段,第 i 行的线段的左端点是(i, L(i)),右端点是(i, R(i)),其中 1 ≤ L(i) ≤ R(i) ≤ n。 你从(1, 1)点出发,要求沿途走过所有的线段,最终到达(n, n)点,且所走的路程长度要尽量短。 更具体一些说,你在任何时候只能选择向下走一步(行数增加