04 2024 档案
摘要:题目: 链接: https://www.luogu.com.cn/problem/CF1907D 大致思路: 二分模拟 关键点: ①确定二分区间:最小值为第一次跳的左边界,最大值为连续两个线段的最远值(注意,应该有四种情况:左1减右1,左2减右1,左1减右2,左2减右2,取绝对值); ②确定如何模拟
阅读全文
摘要:链接:https://codeforces.com/problemset/problem/1927/E 思路:观察,可知每隔k个数据就是+1/-1,且间隔而分,思路如下: 然后按顺序打表就行 代码: #include<iostream> #include<vector> #include<algor
阅读全文
摘要:https://codeforces.com/contest/1957/problem/C 题面: 题解: 补充说明: 把n阶棋盘想成n-1阶和外面套了一圈的如上图 则可以分成下面两种情况: 1. 下在(1,1)处,那么为dp[n-1] 2. 从(1,2)...(1,n-1)|(2,1)...(n-
阅读全文
摘要:网站:https://www.luogu.com.cn/problem/CF1932C https://codeforces.com/problemset/problem/1932/C 离线处理思想,分配id和val 先读入一整行输入,然后按照处理顺序给每个字母打上id sort:注意,按照id从大
阅读全文
摘要:链接:https://www.luogu.com.cn/problem/CF1932D https://codeforces.com/problemset/problem/1932/D 总的来说,就是把每副牌分开存储,然后如果长度是奇数,那么就从万能牌中拿过来一张;如果是偶数就不需要 判断是否是im
阅读全文
摘要:原作者:https://www.cnblogs.com/wenzhixin/p/8509909.html 额外:https://blog.csdn.net/sodacoco/article/details/84798621 ·······························&#
阅读全文
摘要:题目: 链接:https://www.luogu.com.cn/problem/P8725 思路:dp[i][j]表示第i个时刻还有多少体力 之前的错误思路:dp[i][j][k]表示第i个时刻,在j位置,有k个体力。 但是注意:这三个变量并不是相互独立!! 动规的一个取变量原则应该是相互独立确定某
阅读全文
摘要:题目: 链接:https://www.luogu.com.cn/problem/P8708 这个大佬的题解讲的很好: 我补充说明下他没讲仔细的地方: 关于p:p记录的是“后”+“前”的第一个小于等于k的位置,当p在i的右边的时候,说明多加了一个i,要减掉; 关于为什么似乎没有记录反着拼接? 比如说,
阅读全文
摘要:题面: 链接:https://www.luogu.com.cn/problem/P8687 总的思路就是状态压缩: 如m为4时,1101代表有1,3,4口味的糖果。 然后状态转移用dp[i]:i是口味,某几种口味的集合。 用tg[i]存每包的糖果种类,然后重点在于转移方程 #include<iost
阅读全文
摘要:题目: 链接:https://www.luogu.com.cn/problem/P8625 基本思路: 1.使用dp[N]记录i节点的当前最大值 2.使用vectornex[N]记录图 3.使用vis[N]防回退 如果该节点没有子节点,那么这个点的最大值就记录为当前的值:val 如果该节点有子节点,
阅读全文
摘要:状态压缩模板题目 链接:https://www.luogu.com.cn/problem/P1433 说明: dp[s][j]表示的是含有j号点的s集合,以j号点为终点的最小旅行商距离! 那么dp[s][j] = min(dp[s][j],dp[s^(1<<j)][k] + dist(j,k));
阅读全文
摘要:链接:https://www.luogu.com.cn/problem/CF1915F 题目: 比较隐蔽的逆序对问题 先按begin排:sort 然后再用归并记录end的逆序 #include<iostream> #include<vector> #include<algorithm> #inclu
阅读全文
摘要:https://codeforces.com/problemset/problem/1933/E 前缀和 + 二分查找,之前一直用三分,好像不太行? 总之找到u和u+1的就行 代码: #include<iostream> #include<vector> #include<algorithm> #i
阅读全文
摘要:#include<iostream> #include<map> #include<algorithm> #include<math.h> using namespace std; /*3372*/ typedef long long ll; const int N = 1e5 + 10; ll a
阅读全文
摘要:题目: 链接:https://www.luogu.com.cn/problem/P1435 观察到:在里面插入字符不会影响外面的配对 所以以dp[i][j]记录字符串s下标从i到j变化到回文串步数,那么递推公式: if(s[i] == s[j])dp[i][j] = dp[i+1][j-1]; el
阅读全文
摘要:题目: 链接:https://www.luogu.com.cn/problem/P1833 知识点:二进制优化,完全背包 emm怎么说呢,还是被卡内存,所以自顶而下编程不好!还是用滚动数组好点 代码: #include<iostream> #include<vector> #include<algo
阅读全文
摘要:题目: 链接:https://www.luogu.com.cn/problem/P4933 这题本来的思路大体上是对的,就是根据已有的往后面推就行: 以i号元素结尾,公差为j的等差数列的数量 = 遍历k∈[1,i-1],dp[k][j]+1的和。 和这个大佬想的差不多,不过刚开始有点细节错误qAq
阅读全文
摘要:题目: 链接:https://www.luogu.com.cn/problem/P2285 这题感觉如果想不到递推关系可能会很麻烦,因为我之前想到的关系就是用dp存:包含三个维度:times,x,y,即dp[times][x][y]来存,然后递推。 但是如果把dp看作是以p结尾的抓到的耗子数量时就会
阅读全文
摘要:链接:https://www.luogu.com.cn/problem/P1020 这个题目一分为二: 首先就是LIS:改下,改成最长不升子序列,复杂度:nlogn;然后用vector的贪心,复杂度:n^2(这里似乎可以二分降到nlogn,不过反正过了OwO!) 被这个输入卡的好难受,建议用getl
阅读全文
摘要:题面: 回顾下最长公共子序列: if(a[i]!=b[j]) dp[i][j] = max(dp[i-1][j],dp[i][j-1]); else dp[i][j] = dp[i-1][j-1] + 1; 复杂度为O(n^2) 但是这题不行,数据卡到了1e5,所以应该再次观察: 注意到是两个全排列
阅读全文
摘要:参考链接:https://blog.csdn.net/lxt_Lucia/article/details/81206439 #include<iostream> #include<vector> #include<algorithm> #include<math.h> #include<sstrea
阅读全文
摘要:知识点:多重背包,也就是一个物品有多个,然后求总价值。 算法竞赛上的板子题目: 链接:https://www.luogu.com.cn/problem/P1776 介绍二进制拆分优化 就是把几个完全相同的拆成1+2+4+...+2^n+mod,然后再进行dp的办法 代码: 重点在new_n,new_
阅读全文
摘要:题目: 链接:https://www.luogu.com.cn/problem/P1077 总的来说就是和上题差不多? 记dp[i][j]为前i种花塞进了j的背包的种类,那么状态转移方程: 就是:dp[i][j] = dp[i-1][j] + dp[i-1]j-k 贴代码: #include<ios
阅读全文
摘要:这种的动态规划题目主要还是不能被自己的思路限制了,之前的dp[i][j]是“最大值”; 这里得把dp[i][j]理解为前i个物品放到j容的背包中的方法; 那么很显然有递推公式: 代码: #include<iostream> #include<vector> #include<algorithm> #
阅读全文
摘要:题面: 链接:https://www.luogu.com.cn/problem/solution/P1616 类型:完全背包模板 完全背包感觉也可以用普通的0/1背包去写,但是似乎时间不够? 总之这种题目的模板就是一个一维数组dp,然后空间从t[i]遍历到times,这样可以实现多个t[i]相加 这
阅读全文
摘要:emmmm...据说是比较简单的dp?(再一次意识到自己的菜) 链接:https://www.luogu.com.cn/problem/P1002 题目: 总的思路就是一个状态转移方程吧: dp[x][y] = dp[x-1][y] + dp[x][y-1]; 然后如果发现这个点不能通过,那么强制修
阅读全文
摘要:链接:https://www.luogu.com.cn/problem/P1802 额,dp的板子?差不多,就加一个变式就行( 代码: #include<iostream> #include<vector> #include<algorithm> #include<math.h> #include<
阅读全文
摘要:链接:https://www.luogu.com.cn/problem/P1434 题目: 思路:找每个点的小于链的长度,存在lenless里;找每个点的大于链,存在于lengreat中。 然后两个相加,排序,选择最大的那个数字。注意这里长度要加1,因为没有加上自己的(初始数据设置成0)! (按理说
阅读全文
摘要:书上讲的感觉不好理解,不如算法竞赛上分析的 题目链接: https://www.luogu.com.cn/problem/P3375 贴板子: #include<iostream> #include<vector> #include<algorithm> #include<math.h> #incl
阅读全文
摘要:#include<iostream> #include<vector> #include<algorithm> #include<math.h> #include<sstream> #include<string> #include<string.h> #include<iomanip> #incl
阅读全文