首页 > TAG信息列表 > TJOI2007

[TJOI2007]跳棋

[TJOI2007]跳棋 题意: 给定一个 \(n \times n\) 的图,有 \(0\) 和 \(1\) 两种点权,每个 \(0\) 能到上下左右同一列/行的下一个 \(0\) ,每个 \(0\) 只能经过一次,给定一个起点,求路径最长。 分析: 因为只能横着/竖着走,因此只能向一个方向拓展。 考虑将走 \(0\) 的情况转变为走 \(1\) ,当向

P3842 [TJOI2007]线段

每行一个线段,必须要走完,显然可以发现从左往右走完或者从右往左走完是比较优的。从中间往下走浪费步数??(好像可以,但是我理解不来,也找不到有人这样写) 那么是该从左往右还是从右往左呢。我们需要枚举了。这个状态又有最优子结构,这时候需要优雅的暴力--DP。 \(f[i][0]\)表示走完第i行的

P3842 [TJOI2007]线段

题意: 有\(n*n\)的区间,你从(1,1)点出发,到达(n,n)点,每一行有条线段,你需要走完每一条线段,问最少需要走几步?(\(n\leq2*10^4\)) 题解: 这是个很裸的\(DP\)(最近重新开始刷\(DP\)),显然开\(n*n\)的区间是开不了的,我们知道,每一行结束的位置一定在每一行线段的左端点或者右端点,即恰好走完这

[TJOI2007] 路标设置 题解

众所周知,我刚刚学了二分。于是决定学以致用。看到一道往年省选,我就动了杀心。于是切了。 由于它的标签是二分,所以我就二分了。观察发现,道路的空旷指数是有序的,所以对这个域二分。很明显,你需要先把原有路标排序,然后才能判断是否放上新的路标。 然后就好做了。时间复杂度 \(O(n \log

洛谷 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; retur

P3846 [TJOI2007] 可爱的质数/【模板】BSGS

稍后更新 题面 题意: 给定\(p,b,n\),求满足\(b^{x}\equiv n\ (mod\ p)\)的最小的\(x\)的值 算法分析: 根据题意我们很容易想到这个题用\(BSGS\)(大步小步算法或北上广深或拔山盖世)来做,\(BSGS\)就是用来处理这一类问题的 \(BSGS\)中的\(p\)为质数 实现: 我们考虑柿子\(b^{x}\equiv n\ (m

P3842 [TJOI2007]线段

题目描述 在一个 n*n 的平面上,在每一行中有一条线段,第 i 行的线段的左端点是(i, L(i)),右端点是(i, R(i)),其中 1 ≤ L(i) ≤ R(i) ≤ n。 你从(1, 1)点出发,要求沿途走过所有的线段,最终到达(n, n)点,且所走的路程长度要尽量短。 更具体一些说,你在任何时候只能选择向下走一步(行数增加

P3847 [TJOI2007]调整队形 题解

原题链接 简要题意: 每次可以在数组中插入一个数(可以在两端)或删除一个数,改变一个数;求让数组成为回文数组的最小步数。 这题的蓝太假了,水 \(\text{dp}\),想到算法就可以做出。 关键还是要想到用 动态规划 啊,要是想不到这题就做不出来了。 (考场上可以先用搜索,然后记忆化推导也行,但是这