自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 寒假日报2 数据结构

st表最近公共祖先LCAP3379 【模板】最近公共祖先(LCA)#include<bits/stdc++.h>using namespace std ;const int N = 5e5+10 ;struct node{ int to,nex ;}e[N<<1];int cnt,head[N] ;void add(int u,int v){ e[++cnt].to=v ; e[cnt].nex=head[u] ;//下一条边 head[u]=cn

2022-02-20 22:01:52 481

原创 寒假日报(part1 dp)

1.17线性dp/最长上升子序列LISP1216 数字三角形 P1020 导弹拦截 P1091 合唱队形 代码见洛谷总结:LIS两种方法:dp&二分二分只能严格单调上升(相等的没有办法替换)//dpint ans = 0 ;for(int i = 1 ; i <= t ; i++){ dp[i]=1 ; for(int j = 1 ; j < i ; j++) if(a[j] < a[i]) dp[i] = ma

2022-01-18 21:58:11 265

原创 哈尔滨ccpc2021

i题题目链接:Problem - I - Codeforces题意:给n个数a[i]。一轮可以按(2^n:1,2,4,8,16……)顺序,可以给a[i]减(每一个数都要用上)。求减的最小轮数。样例:思路:对a[i]求出二进制下对应的每一位。num[i]为该位的需要处理的数目。eg:a[1]=1,a[2]=4=100,则num[1]=1,num[2]=0,num[3]=1;处理步骤:(1)处理第3位:令x=num[3]=1,但是num[2]=0<1=x,所以不

2022-01-14 17:47:33 3411

原创 背包dp浅谈

定义:01背包:每个物品只能拿1次完全背包:每个物品可以拿无限次多重背包:每个物品拿的次数限制不同区别(一维):01背包和多重背包,dp[j]继承的是i-1的状态,所以循环从后往前j=m;j>=w[i];j--完全背包,dp[j]继承的是i自己的状态,所以循环从前往后j=w[i];j<=m;j++...

2021-10-18 15:27:35 66

原创 hdu6549(dp)

#include<bits/stdc++.h>using namespace std ;const int N = 2e5+23 ;//思路:dp//dp[i][j][k]为处理了1->i。第i个位置为j+'a',最多k段的最小处理数//1.s[i]==j+'a' 第i位不用修改,则由i-1转移过来,dp[i][j][k] = dp[i-1][j][k]//2.s[i]!=j+'a' 第i位用修改,贪心,由p=i-l转移,dp[i][j][k]=min(dp[p][j][k..

2021-10-17 20:51:20 56

原创 博弈论(to be continue)

sg函数的理解即对应多少级,可以用图理解,sg[0]即为终点(无下一条边),故sg[0]=0未完待续

2021-10-13 21:02:03 42

原创 lucas定理 hdu5794

定义证明代码实现//lucas定理//1.qpow,阶乘(init)//2.lucas//3.组合排列C(nm)#include<bits/stdc++.h>#define ll long long using namespace std ;const int mod = 110119 ;ll jc[mod+1],nc[mod+1] ;ll qpow(ll x,int k){ ll base = 1 ; while(k) { if...

2021-10-13 20:56:05 63

原创 CodeForces - 1454F

#include<bits/stdc++.h>using namespace std; //思路://1.找到tl,tr//2.找到中间的位置u,并得到u能延伸的区间[l,r] //3.判断tl,tr,l,r关系 //各个值的意义 //int a[]原值,b[]离散,a[]离散化后的值//int l[i],r[i]储存位置i的值x可以作为区间最小值,所能延申的最大距离 ,即单调栈 栈内从1->n递增 //int mxl[i],mxr[i],分别为从左右两边到i的最大值.

2021-09-24 23:08:16 108

原创 POJ 2796 Feel Good 单调栈

应用:用于求x可以延申的区间例题: POJ 2796 Feel Good 题目链接:2796 -- Feel Good (poj.org)题意:给一个序列,求一个区间和*区间最小值的 最大值 ; 输出最大值,区间左端点,区间右端点如:3 1 6 4 5 2解:645为最优解,输出:60 3 5代码#include<iostream>#include<stack>#include<cstdio>#define ll lon

2021-09-24 21:19:34 76

原创 A - Fire Net(dfs)

参考:https://blog.csdn.net/weixin_41075012/article/details/79690951思路:1.找到要放的位置(x,y) 从x=0,y=(0,1,2,3) x=1,y=(1,2,3,4)……int x = k/n ;int y = k%n ;dfs(k+1,num) ; 2.深搜,到了最后一格(k=n*n)可以就returnif(k == n*n)3.返回撤销,继续搜a[x][y] = 'O' ;dfs(k+1,num+1) ;a[x]

2021-05-27 15:36:16 53

原创 E - Leading and Trailing (快速幂)

参考:mrxs的csdn :https://blog.csdn.net/FEATHER2016/article/details/78042770/题意:求n的k次方 前三位与后三位/方法:快速幂ans1 取后三位 直接mod1000ans2 取前三位 要用double 否则会舍弃后边进位学会:不递归快速幂ll qpow(ll x, ll k){ ll ans = 1 , base = x; while(k) { if(k%2) { ans = (ans*base)%mod

2021-05-23 22:00:40 64

原创 LCS

LCS最长公共子序列思路:dp//状态转移方程://dp[]储存 当前最长公共子序列的长度//假设z[]为最长公共子序列1.a[i]=b[j] dp[i][j] = dp[i-1][j-1]+1//因为a[i]=b[j],所以a[i]=b[j]=z[len] 所以dp[i][j] = dp[i-1][j-1]+12.a[i]!=b[j] && z[k]!=a[i] 所以***dp[i][j] = dp[i-1][j]*** ,即a[i]对dp[i][j]无影响3.a[i]!=

2021-05-21 22:02:03 39

原创 最长子序列LIS

最长子序列LIS(1).暴力dp//LIS 基础dp法//思路:1.dp[i]储存的是以i结尾的最长上升子序列长度//2.跟前边的aj比较, 如果a[i]>a[j],就a[i]可以加到j序列后边,//所以dp[i]=dp[j]+1 ,多次取max即可//ps 如果都不可以加,则dp[i] = 1 ;可以理解为创造新序列//3.ans多次取max 即:ans=max(ans,dp[i])//比较dp与二分://dp双层循环 ,复杂度为n*n//二分 nlogn 少了第二层循环//因

2021-05-20 22:02:01 88

原创 第五周 数论&dp

数论欧拉筛思路:从小的素数开始,往后排查大数。是其倍数的话就维护:1.标记非素数 2.因数数减去 phi[j]/i ;原理:即使筛去2、3……,排列依旧是按照一定顺序,所以可以进行上述操作2。const int maxn = 1e6 ;void get_phi(){ for(int i = 0 ; i <= maxn ; i++) { phi[i] = i ; isprime[i] = 1 ; } isprime[0] = 0 ; isprime[1] = 0 ; p

2021-05-11 22:10:33 47

原创 第三周周报

Mon wa: 周练B题(线段树)Tue*** ac: 线段树F题,周练B题(线段树)周练B题:B - I Hate It HDU - 1754做了3遍,问题出在对tag,push_down的理解与应用。小结:本题涵盖单点修改,单点查询,区间修改(区间均为1,n)。只用tag,tag即底层答案,所以区间修改只需一步。tag[1] = max(tag[1],x) ;上层tag用于单点修改与区间查询。push_down 思路:tag[1]储存x(要改的值),比较要改的值,与自身值;若自身

2021-04-20 23:28:52 44

原创 离散化

思路1.将原有数组排序。2.去重 。(3)特殊操作,如加点4.用数组下标给原数据赋值。步骤实现1.排序sort(ans,ans+cnt) ;2.去重ll m = unique(ans,ans+cnt)-ans ;ll tot = m ;//方便(3)的循环(3)特殊操作,如加点。然后要再排序for(ll i = 1 ; i < m ; i++){ if(ans[i]-ans[i-1] > 1) ans[tot++] = ans[i-1]+1 ;} sort(a

2021-04-13 15:55:29 29

原创 2010.4.10 第一周 线段树

一、建树建树:二分法ll ls(ll p){ return p<<1 ; }ll rs(ll p){ return p<<1|1 ; }void push_up(ll p){ ans[p] = ans[ls(p)]+ans[rs(p)] ; }void build(ll p, ll l , ll r){ if(l == r) { ans[p] = a[l] ; return ; } ll mid = (l+r)>>1 ; build(ls

2021-04-10 20:24:09 68

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除