自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AcWing 487. 金明的预算方案(分组背包)

遍历一组数的可以选择的多种情况,for(int i=0;i++) (k为共有多少数)分组方法:一主多仆情况利用主仆数组,下标为k的仆数组存储主数组编号为k的仆人。

2022-10-13 17:02:58 246 1

原创 Educational Codeforces Round 136 (Rated for Div. 2) C. Card Game(递推)

【代码】Educational Codeforces Round 136 (Rated for Div. 2) C. Card Game(递推)

2022-10-10 21:19:01 225

原创 Acwing111. 畜栏预定(贪心)

【代码】Acwing111. 畜栏预定(贪心)

2022-10-04 22:24:44 210

原创 AcWing 4614. 匹配价值(预处理+枚举)

【代码】AcWing 4614. 匹配价值(预处理+枚举)

2022-09-15 22:28:59 159

原创 AcWing 11. 背包问题求方案数(背包dp)

dp[i][j]:表示从1~i件物品中选,体积恰好为j的最大值。

2022-08-15 11:28:12 74

原创 AcWing 1010. 拦截导弹(最长上升子序列dp)

从前往后依次遍历每一个序列中的元素,会有两种选择,如果现有子序列的结尾都小于当前数,则创建一个新序列;要么就把当前数放在结尾小于且最接近当前数的子序列的后面。第二问:贪心(正确性证明:调整法)第一问:经典最长上升子序列问题。...

2022-08-04 18:06:07 79

原创 AcWing 1012. 友好城市(最长上升子序列dp)

如果任意两个城市不会发生交叉,那么两座城市在南北两侧的顺序应该是相同的。若给任意一侧的城市按顺序编号,那么要想不出现交叉的现象在另一侧对应城市的编号顺序一定是单调递增或递减的。如此可得,将某一侧城市按顺序编号,只需找到另一侧对应编号的最长上升子序列。...

2022-08-02 15:11:48 263

原创 AcWing 275. 传纸条(dp)

思路和方块取数是一样的,唯一不一样的地方是,此题明确规定一个位置只能走一次,经分析可知,方格取数得到的结果肯定可以是两条不相交(无重合路径)的路径,所以方格取数代码也适合本题。............

2022-07-31 11:13:15 192

原创 AcWing 3598. 二叉树遍历(dfs)

...

2022-07-14 23:59:16 104

原创 AcWing 1027. 方格取数(线性DP)

思路:两条路径同时出发。状态表示:dp[i1][i2][j1][j2]表示两条路径分别到达两个点的最大值,因为同时走,所以一定会有i1+i2=j1+j2,所以可以简化为三维dp[k][i1][i2],k为路径的横纵坐标之和。状态计算:求某一状态的最大值可以转移成求上一状态的最大值再加上当前所求状态的方格数值,若当前状态的i1和i2相同,那么说明两条路径到达同一位置,因为方格数值不能重复取,所以方格数值只能加一次;若不同,就分别加两个位置的方格数值。上一状态解释:(1.第一条路经从左边来第二条路径

2022-05-10 10:23:38 200

原创 acwing.【没有上司的舞会】(树形dp)

#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int N=6010;int happy[N];bool has_father[N];int dp[N][2];int head[N],e[N],ne[N],idx;void add(int x,int y){ e[idx]=y; ne[idx]=head[x]; head[...

2022-05-07 10:45:07 279

原创 c++运算符优先级

! sizeof 强制类型转换 ~ > 算术运算符 > << >> > 比较运算符> & > ^ > | > && > ||

2022-05-06 19:07:18 386

原创 AcWing 1986. 镜子(模拟)

高端的烹饪往往仅需要朴素的食材,简单的题目就要用复杂的方法解决#include<bits/stdc++.h>using namespace std;const int N=210,zh=10000000;struct mirror{ int x,y; char c;}q[N];int n,a,b;void rotate(char &s){ if(s=='/'){ s='\\'; } else{ s='/'; }}bool dfs(int q

2022-05-04 23:27:18 128

原创 AcWing 886. 求组合数 II(组合计数+逆元++费马小定理+快速幂)

#include<bits/stdc++.h>using namespace std;typedef long long ll;const int mod=1e9+7,N=100010;int fact[N],infact[N];int qmi(int a,int p,int k){ int res=1; while(p){ if(p&1){ res=(ll)res*a%k; } p=p>>1; a=(ll)a*a%k; } ...

2022-05-04 14:11:16 160

原创 AcWing 875. 快速幂(快速幂)

#include<bits/stdc++.h>using namespace std;typedef long long ll;int quckymi(ll a,ll b,ll p){ ll res=1; while(b){ if(b&1){ res=res*a%p; } b=b>>1; a=a*a%p; } return res; }int main(){ ios::sync_with_stdio(0); cin.tie(.

2022-05-03 17:30:01 173

原创 AcWing 874. 筛法求欧拉函数(线性筛法+欧拉函数)

#include<bits/stdc++.h>using namespace std;const int N=1000010;int prime[N],cnt,eular[N];bool st[N];int main(){ int n; cin>>n; for(int i=2;i<=n;i++){ if(!st[i]){ prime[cnt++]=i; eular[i]=i-1; } for(int j=0;prime[j]*i&l.

2022-05-03 11:07:11 160

原创 AcWing 885. 求组合数 I (组合计数)

#include<bits/stdc++.h>using namespace std;const int mod=1000000007;const int N=2010;int c[N][N];int main(){ ios::sync_with_stdio(0); cin.tie(0); for(int i=0;i<=2000;i++){ for(int j=0;j<=i;j++){ if(j==0){.

2022-05-02 23:36:18 166

原创 AcWing 831. KMP字符串(kmp)

kmp:不去浪费匹配成功一部分但没完全匹配所用的时间

2022-05-01 23:29:26 176

原创 AcWing 154. 滑动窗口(单调队列)

思路:先求滑动窗口的最小值,对暴力做法进行优化,用一个队列维护滑动窗口,如果某个窗口内的某个位置 i 的值比前面的元素小,那么在这个窗口和后面的窗口中 i 前面的元素一定是不会被输出的,就可以删掉,这样得到的队列一定是单调递增的,队头为最小值。如果队头元素的位置超出窗口的范围要对队列进行删减。因为在一个窗口中最小元素的位置是不确定的,所以队列要存储元素的位置#include<bits/stdc++.h>using namespace std;const int N=10000

2022-04-22 17:15:52 449

原创 AcWing 1353. 滑雪场设计(贪心+枚举)

思路:最优解的所有山峰高度一定在一个长度为17的区间内,枚举所有可能为最优解的区间,每个区间都用贪心算出最少花费。#include<bits/stdc++.h>using namespace std;int arr[1010];int main(){ int n; cin>>n; for(int i=1;i<=n;i++) cin>>arr[i]; int res=0x3f3f3f3f; for(int i=0;i<=83;i++){

2022-04-20 22:50:04 280

原创 AcWing 830. 单调栈(单调栈)

#include<bits/stdc++.h>using namespace std;const int N=100010;int stk[N],tt;int main(){ ios::sync_with_stdio(0); cin.tie(0); int n; cin>>n; for(int i=1;i<=n;i++){ int x; cin>>x; while(tt>0&&stk[tt]>=x){.

2022-04-15 09:23:15 99

原创 AcWing 3302. 表达式求值(栈)

#include<bits/stdc++.h>using namespace std;unordered_map<char,int> you={{'+',1},{'-',1},{'*',2},{'/',2}};stack<int> s1;stack<char> s2;void f(){ int re=0; int a=s1.top(); s1.pop(); int b=s1.top(); s1.pop(); char c=s2.to.

2022-04-14 17:01:03 159

原创 AcWing 846. 树的重心(DFS)

超时代码:#include<bits/stdc++.h>using namespace std;const int N=100010;int head[N],e[N],ne[N],idx;int dp[N];bool st[N];int n;void add(int x,int y){ e[idx]=y; ne[idx]=head[x]; head[x]=idx; idx++;}int dfs(int d){ int res=1; for(int i=.

2022-04-14 15:17:39 99

原创 AcWing 837. 连通块中点的数量(并查集)

#include<bits/stdc++.h>using namespace std;const int N=100010;int p[N],sizee[N];int findd(int x){//路径压缩 if(p[x]!=x){ p[x]=findd(p[x]); } return p[x];}int main(){ ios::sync_with_stdio(0); cin.tie(0); int n,m; cin>>n>>m;.

2022-04-13 15:27:39 131

原创 AcWing 836. 合并集合(并查集)

作用:高效的合并两个集合和查询两个元素是否在同一个集合,时间复杂度近O(1);原理:每个集合用一颗树来表示,树根的编号就是整个集合的编号,每个节点存储他的父节点。#include<bits/stdc++.h>using namespace std;const int N=100010;int p[N];int findd(int x){ while(p[x]!=x){ x=p[x]; } return x;}int main(){ ios::sync_wi

2022-04-13 10:28:09 117

原创 AcWing 143. 最大异或对(trie+贪心)

#include<bits/stdc++.h>using namespace std;const int N=100010,M=N*31;int son[M][2],idx,a[N];void add(int x){ int p=0; for(int i=30;i>=0;i--){ int t=x>>i&1; if(!son[p][t]){ son[p][t]=++idx; } p=son[p][t]; }}int sea.

2022-04-12 10:31:16 88

原创 AcWing 835. Trie字符串统计(trie树)

一种可以高效地存储和查询字符串的数据结构#include<bits/stdc++.h>using namespace std;const int N=20010;int sinn[N][100],cnt[N],idx;void add(string s){ int p=0; for(int i=0;i<s.size();i++){ int t=s[i]-48; if(!sinn[p][t]){ sinn[p][t]=++idx; } p=sin.

2022-04-11 22:02:10 363

原创 AcWing 4397. 卡牌(贪心)

思路:相当于交换两个序列的位置,以数列a为所求数列,若数列b某个位置的值小于数列b同样位置的值,则考虑交换此位置的值,因为交换次数有限制,所以优先交换 <<交换价值大的>>#include<bits/stdc++.h>using namespace std;const int N=200010;typedef pair<int,int> pii;int a[N],b[N];int n,k;priority_queue<pii>

2022-04-11 18:26:31 173

原创 AcWing 801. 二进制中1的个数(位运算)

lowbit(x):返回x中的最后一个1。#include<bits/stdc++.h>using namespace std;int n;int lowbit(int x){ return x&-x;}int main(){ cin>>n; for(int i=1;i<=n;i++){ int x; cin>>x; int res=0; while(x){ x=x-lowbit(x); res++;.

2022-04-07 20:53:43 154

原创 AcWing 797. 差分(差分)

差分:用O(1)的时间代替O(n)对一个序列的一个区间进行处理。经原序列可以得到的差分序列,差分序列求前缀和可以得到原序列。把对原序列进行的操作转化成对差分序列进行操作。#include<bits/stdc++.h>using namespace std;const int N=100010;int arr[N],brr[N];int n,m;int main(){ ios::sync_with_stdio(0); cin.tie(0); cin>>

2022-04-07 17:01:09 271

原创 AcWing 796. 子矩阵的和(二维前缀和)

注意一撮小细节:尽量把每个坐标看成一个格子,而不是一个点。#include<bits/stdc++.h>using namespace std;const int N=1010;int n,m,q;int arr[N][N];int main(){ cin>>n>>m>>q; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ int x; cin>>x;.

2022-04-07 15:02:44 246

原创 AcWing 872. 最大公约数(gcd)

gcd算法,辗转相除法。#include<bits/stdc++.h>using namespace std;int gcd(int a,int b){ return b?gcd(b,a%b):a;}int main(){ ios::sync_with_stdio(0); cin.tie(0); int n; cin>>n; for(int i=1;i<=n;i++){ int a,b;

2022-04-07 14:15:53 84

原创 AcWing 870. 约数个数(约数)

结论:一个数约数的个数:分解质因数,求出每个质因数的底数和指数,约数个数就等于每个质因数的(指数+1)求积。对一个数分解质因数:假设d是n的任意一个质因数,那么一定有一对(β1,β2...βk)可以使下式成立。那么,总的约数个数就等于所有β可能的取值个数的乘积。#include<bits/stdc++.h>using namespace std;const int mod=1000000007;int n;long long res=1;unorder...

2022-04-07 00:19:21 1075

原创 AcWing 4394. 最长连续子序列(双指针)

#include<bits/stdc++.h>using namespace std;const int N=500010;int n,k,ll=1,rr=1,l=1,r=0,kk=0;int arr[N];int hasharr[1000010];int main(){ ios::sync_with_stdio(0); cin.tie(0); cin>>n>>k; for(int i=1;i<=n;i++){ cin&gt.

2022-04-06 17:07:34 160

原创 AcWing 868. 筛质数(埃氏筛法+线性筛法)

#include<bits/stdc++.h>using namespace std;const int N=1000010;bool st[N];int n,cnt=0;void qiuz(){ if(n==1){ cout<<"0"; return ; } for(int i=2;i<=n;i++){ if(!st[i]){ cnt++; for(int j=i+i;j<=n;j=j+i){ st[j]=true;.

2022-04-06 09:06:41 462

原创 AcWing 866. 试除法判定质数(试除法)

#include<bits/stdc++.h>using namespace std;bool f(int a){ if(a==1){ return false; } for(int i=2;i<=a/i;i++){//小细节,sqrt()每次都执行费时间,写成i*i<=a可能会int溢出 if(a%i==0){ return false; } } return t.

2022-04-05 22:37:05 172

原创 854. Floyd求最短路(floyd)

#include<bits/stdc++.h>#include<bits/stdc++.h>using namespace std;const int N=210;int dp[N][N];int n,m,k;void floyd(){ for(int k=1;k<=n;k++){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ dp[i][j]=min(dp[i][j],dp[i][.

2022-04-05 18:32:02 171

原创 AcWing 852. spfa判断负环(spfa)

#include<bits/stdc++.h>using namespace std;const int N=100010;int n,m;int h[N],e[N],ne[N],w[N],idx;int dist[N],cnt[N];bool st[N];queue<int> que;void add(int x,int y,int z){ e[idx]=y; w[idx]=z; ne[idx]=h[x]; h[x]=idx; idx++; retur.

2022-04-05 17:09:03 68

原创 AcWing 851. spfa求最短路(spfa)

其实就是对bellman-ford进行优化:#include<bits/stdc++.h>using namespace std;const int N=100010;int n,m;int h[N],e[N],ne[N],w[N],idx;int dist[N];bool st[N];queue<int> que;void add(int x,int y,int z){ e[idx]=y; w[idx]=z; ne[idx]=h[x]; h[x]=id

2022-04-05 16:49:41 190

原创 AcWing 853. 有边数限制的最短路(bellman-ford)

#include<bits/stdc++.h>using namespace std;const int N=10010;int n,m,k;int dist[N],backup[N];struct edge{ int x,y,z;}edge[10010];void bellman_ford(){ memset(dist,0x3f,sizeof(dist)); dist[1]=0; for(int i=1;i<=k;i++){//松弛操作(重点),循环完后保..

2022-04-04 13:16:10 440

空空如也

空空如也

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

TA关注的人

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