
dp
thusloop
这个作者很懒,什么都没留下…
展开
-
2022杭电多校第二场 Slayers Come
我们将所有区间按照右端点从小到大进行排序,依次扫描每个区间,考虑一个区间[l,r]对dp数组的贡献。n个位置,m个区间,求选出的区间能够重复覆盖[1,n]的方案数。设dp[i]表示恰好覆盖了区间[1,i]的方案数。预处理计算出每个爆炸点爆炸的范围(可用st表+二分实现)用线段树维护这些dp信息(区间乘,单点加,区间求和)初始化dp[0]=1。...原创 2022-07-29 20:46:36 · 197 阅读 · 0 评论 -
牛客,似花还似非花(dp优化)
似花还似非花这个题实际上是求解两个排列的包含某一特定元素的情况下的最长公共子序列长度。最长上升子序列用树状数组优化//#pragma GCC optimize(2)//#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>#define int long long#define fi first#define se second#define pb push_back#define pii pair<原创 2022-05-16 16:24:42 · 123 阅读 · 2 评论 -
Junior Mathematician(数位dp)
Junior Mathematician#pragma GCC optimize(2)#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>#define ll long long#define fi first#define se second#define pb push_back#define pii pair<int,int>#define IOS ios::sync_with_stdi原创 2022-04-11 14:40:14 · 376 阅读 · 1 评论 -
F2. Game on Sum (Hard Version)
F2. Game on Sum (Hard Version)dp方程: f[i][j]=i(i==j时)复杂度nm,考虑优化,观察到转移方程和组合数的公式类似考虑 (i,i)对(n,m)的贡献 即(i,i)到(n,m)路径的数量 往下 n-i次 ,往右下m-i次 (第一次只能往下) 所以路径数为C(n-i-1,m-i) 再处理权值 初始值为i,每次向下要除以2//#pragma GCC optimize(2)//#pragma GCC optimize(3,"Ofast","inline")原创 2022-01-29 14:12:17 · 1326 阅读 · 0 评论 -
E.Sasha and Array(线段树+矩阵快速幂)
矩阵相乘有分配律和结合律,所以可以用线段树维护斐波那契矩阵的k次方即矩阵 jz[1][1]=jz[1][2]=jz[2][1]=1;jz[2][2]=0;的k次方#pragma GCC optimize(2)#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>#define int long long#define fi first#define se second#define pb push_back.原创 2021-12-06 20:16:09 · 215 阅读 · 0 评论 -
Magic Gems(矩阵快速幂优化dp)
Magic Gems由题意易得dp转移方程 : f[i]=f[i-1]+f[i-m]构造m*m矩阵(类似斐波那契数列)1 0 0……0 0 1 f[i-1] f[i] 1 0 0……0 0 0 f[i-2] f[i-1] 0 1 0……0 0 0 f[i-3]原创 2021-12-01 20:47:31 · 245 阅读 · 0 评论 -
E. William The Oblivious(线段树)
题意:给定只包含abc的字符串 ,q次单点修改 每次修改后问 使得不包含abc为子序列的最小操作数是多少设t[k].abc为不包含abc为子序列的最小操作数得到以下状态转移 t[k].a=t[k<<1].a+t[k<<1|1].a; t[k].b=t[k<<1].b+t[k<<1|1].b; t[k].c=t[k<<1].c+t[k<<1|1].c; t[k].ab=min(t[k<<1].a原创 2021-11-30 19:16:01 · 391 阅读 · 2 评论 -
D. Unmerge(01背包)
D. Unmerge//#pragma GCC optimize(2)//#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>#define int long long#define fi first#define se second#define pb push_back#define pii pair<int,int>#define IOS ios::sync_with_stdio(fal原创 2021-11-09 19:02:59 · 124 阅读 · 0 评论 -
Flowers
Flowersdp[i]=dp[i-1]+dp[i-k];在i-1后放R在i-k后放连续K个W//#pragma GCC optimize(2)//#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>#define int long long#define fi first#define se second#define pb push_back#define pii pair<int,int&原创 2021-10-28 21:07:35 · 89 阅读 · 0 评论 -
Pchelyonok and Segments(二分+dp)
Pchelyonok and Segments题意:找出k的最大值使得连续段递增。思路:二分找k最大值,check里用dp判断是否可行 ,dp[i][j]为i之前的j个值连续的最小值复杂度:n √n*long n//#pragma GCC optimize(2)//#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>#define int long long#define fi first#define原创 2021-10-26 16:38:59 · 252 阅读 · 0 评论 -
Discrete Centrifugal Jumps(单调栈优化dp)
Discrete Centrifugal Jumps题意:i可以跳到j 当且仅当思路:dp[i]为跳到 i 的最小代价 可以用单调栈来寻找哪些点可以跳到 i ;//#pragma GCC optimize(2)//#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>#define int long long#define fi first#define se second#define pb pu原创 2021-10-06 19:03:21 · 223 阅读 · 0 评论 -
Minimal Coverage
Minimal Coverage题意:n根棒,按次序放置,后一根棒的起点为前一根棒的终点,可左右放置,求最后最小覆盖面积思路:dp[i][j]为前 i 根棒放完后以终点位子 j 结束的最小覆盖面积。(最坏情况为最大长度*2)状态转移方程:if(j<=a[i]) dp[i][0]=min(dp[i][0],dp[i-1][j]+a[i]-j);//向左放(ai的长度向左放之后终点为负数了,则可以右端点向右移,使得左端点为0)else dp[i][j-a[i]]=min(dp[i][j-a[原创 2021-10-01 16:12:28 · 296 阅读 · 0 评论 -
F. Zero Remainder Sum(dp)
F. Zero Remainder Sumdp数组初始化无穷小表示不存在这样的数//#pragma GCC optimize(2)//#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>//#define int long long#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);using namespace std;const原创 2021-09-30 12:03:51 · 95 阅读 · 0 评论 -
Distance Sums 2
Distance Sums 2题意:一棵树求所有 i 点到其他点的距离和。思路:dfs先求出第一个点,再根据父节点和子节点的关系推出字节点的ans。(换根dp?) ans[i]=ans[fa]+n-2*son[i];#include<bits/stdc++.h>#define int long long#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);using namespace std;const i原创 2021-09-27 16:55:10 · 169 阅读 · 0 评论 -
Sum of Paths(dp)
Sum of Paths题意 :从i出发走k步的所有可能 的路径和 ,可以修改ai的值思路 :dp[i][j]为某些点走 j 步到达 i 的路径数,反过来想,也就是 i 走 j 步到达某些点的路径数 。记cnt[i]为 ai 出现的次数枚举j ,cnt[i]=∑ dp[i][j]*dp[i][k-j] 左边为到达i的路径数,右边为i出去的路径数。#include<bits/stdc++.h>#define int long long#define IOS ios::sync原创 2021-09-17 10:16:46 · 239 阅读 · 1 评论 -
Phoenix and Computers(组合数+dp)
Phoenix and Computers题意:一开始电脑全关机 ,打开i-1和i+1会使得i电脑自动开机 求使得所有电脑开机的方案数思路:先考虑全手动开机 易得方案为 2^(k-1) , 设f[i][j] 为处理到 i 位并且有j台电脑是手动开的 ,设最后连续 k 台电脑都是手动开的(k<=j)那么 第i-k台一定是自动开的 i-k-1是手动开的 那么i-k-1之前又可以用 f[i-k-1][j-k] 表示 得到转移方程 f[i][j]=Σf[i-k-1][j-k]*C(j,k)*2^(k-1原创 2021-09-16 17:47:11 · 235 阅读 · 0 评论