摘要: 原题链接 跟这题差不了多少,改个方向数组的事 Code: #include<bits/stdc++.h> using namespace std; void read(int &x) { char ch=getchar(); int r=0,w=1; while(!isdigit(ch))w=ch= 阅读全文
posted @ 2022-07-06 11:40 Epoch_L 阅读(24) 评论(0) 推荐(0) 编辑
摘要: 原题链接 题解 我们用 $a[i][j]$ 表示坐标 $(i,j)$ 最先在哪一时刻被撞击,分两种情况: 如果没有陨石撞击,我们将其赋上极值1001,因为 $0 \le T_i \le 1000$。 如果有陨石撞击,因为可能会有多次,我们取最小的时间。 所以,初始化坐标系代码如下: for(int 阅读全文
posted @ 2022-07-06 11:39 Epoch_L 阅读(16) 评论(0) 推荐(0) 编辑
摘要: 原题链接 题解 本题一看就是一道裸的BFS,但是有一个大坑点 所有的x,y,n,m坐标都是反的!!! 所以把 $x$ 改成 $y$,把 $n$ 改成 $m$ 即可 Code: #include<bits/stdc++.h> using namespace std; const int N=150; 阅读全文
posted @ 2022-07-06 11:38 Epoch_L 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 原题链接 题解 二分枚举答案,然后用单调队列求最大值最小值即可 Code: #include<bits/stdc++.h> #define int long long using namespace std; void read(int &x) { char ch=getchar(); int r= 阅读全文
posted @ 2022-07-06 11:35 Epoch_L 阅读(13) 评论(0) 推荐(0) 编辑
摘要: 原题链接 题解 观察数据范围,发现 $k$ 的值只为 $1$ 或 $-1$,所以每行填的数只能是 $1$ 或 $-1$,而 $-1$ 又可以直接改变当前乘积的符号,所以,在矩阵 $(n-1,m-1)$ 中,填 $1$ 或 $-1$ 均可,然后在最后一行和最后一列填上 $1$ 或 $-1$ 使其乘积等 阅读全文
posted @ 2022-07-06 11:34 Epoch_L 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 原题链接 题解 一道区间dp裸题,跟模板题石子合并差不多,但是这里是在玩2048,所以要一样才能合并,而且记录的是出现过的最大值,所以答案不一定是 $f[1][n]$,因为可能出现无法合并的情况。 转移方程: $$ f[i][j]=max(f[i][j],f[k+1][j]+1)(i \le k < 阅读全文
posted @ 2022-07-06 11:31 Epoch_L 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 原题链接 题解 设 $f[i][j]$ 表示对 $i$ 到 $j$ 的字串染色最少多少次,设字符串为 $c$,有 $3$ 种情况: 当 $i=j$ 时,也就是只有一个字符,染色一次就可以了。转移方程为 $f[i][i]=1(1 \le i \le n)$。 当 $i\not=j$ 且 $c[i]=c 阅读全文
posted @ 2022-07-06 11:29 Epoch_L 阅读(21) 评论(0) 推荐(0) 编辑
摘要: 原题链接 题解 首先本题只从左边和右边取,所以剩下的必然是区间,妥妥的区间DP,直接设状态: $f[i][j][0]$ 表示第 $i$ 人从左边插入区间 $i+1,j$ $f[i][j][1]$ 表示第 $j$ 人从右边插入区间 $i,j-1$ 因为第 $i$ 个人从左边插入,根据题意,他就会小于前 阅读全文
posted @ 2022-07-06 11:26 Epoch_L 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 原题链接 题解 考点:带权并查集。 设 $d[x]$ 表示 $x$ 节点前面的战舰数量,$s[x]$ 表示以 $x$ 节点为首的那一列战舰的总数,合并操作如下: void add(int x,int y) { int a=find(x),b=find(y); fa[a]=b; d[a]=s[b]; 阅读全文
posted @ 2022-07-06 11:22 Epoch_L 阅读(39) 评论(0) 推荐(0) 编辑
摘要: 原题链接 前言 蓝题祭。。。 题解 本题最大的难点就是判两个星系是否相似,根据数学知识,如果两个星系中的每个点之间的距离之和相等,则可以判断它们 $similar$。这样就简单了。 代码 $1625B$,$90$ 行。。。真的超长 Code: #include<bits/stdc++.h> usin 阅读全文
posted @ 2022-07-06 11:20 Epoch_L 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 原题链接 题解 考虑DP,我们设 $f[i]$ 表示前 $i$ 头奶牛所能取到的最大值,则在 $(i-k,i)$ 区间中必须有一头奶牛不取,假设它是 $j$,则 $$ f[i]= \max(f[j-1]+s[i]-s[j]) $$ 其中 $s$ 数组表示前缀和。 观察转移方程,发现 $s[i]$ 是 阅读全文
posted @ 2022-07-06 11:00 Epoch_L 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 原题链接 题解 设 $f[i]$ 表示跳到 $i$ 所能取到的最大价值,则我们需要取一个 $j(j<i)$ 使 $f[j]+sum[i]-sum[j]-i100$ 最大,其中 $sum$ 数组表示前缀和,所以转移方程即为: $$ f[i]=\max(f[j]+sum[i]-sum[j]-i100) 阅读全文
posted @ 2022-07-06 10:57 Epoch_L 阅读(10) 评论(0) 推荐(0) 编辑
摘要: 原题链接 序言 本题下面将给出 $3$ 种做法,分别为: $O(n^3)$ 暴力算法。 $O(n^2)$ 费用提前计算,小优化。 $O(nlogn)$ 斜率优化。 洛谷数据很水,$O(n^2)$ 就可以过,加强版的链接贴上 loj10186 题解 Part 1:暴力算法 设 $f[i][j]$ 表示 阅读全文
posted @ 2022-07-06 10:56 Epoch_L 阅读(20) 评论(0) 推荐(0) 编辑