自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 总结---gui

okokokok

2022-08-14 19:45:02 133

原创 7.31 号

ok

2022-07-31 10:32:20 118

原创 7.28号

ok

2022-07-28 18:09:23 121

原创 7.24号

okok

2022-07-24 21:56:16 104

原创 7.20

7.20

2022-07-21 16:55:42 111 2

原创 7.19日记

日记

2022-07-20 14:36:10 119

原创 7.18 日记.收获.计划

日记呢

2022-07-19 09:19:52 106

原创 c++读写文件

c+++++++++

2022-07-04 16:06:14 502

原创 【无标题】

单调队列的简单模板题目思路如下:首先是我们的队里存储的其实是下标,这样相当于有的是原信息(这里可以悟一下)之后就是剔除绝对劣势就可以了

2022-02-28 17:51:58 63

原创 acwing 食物链

动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形。A 吃 B,B 吃 C,C 吃 A。现有 N 个动物,以 1∼N 编号。每个动物都是 A,B,C 中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这 N 个动物所构成的食物链关系进行描述:第一种说法是 1 X Y,表示 X 和 Y 是同类。第二种说法是 2 X Y,表示 X 吃 Y。此人对 N 个动物,用上述两种说法,一句接一句地说出 K 句话,这 K 句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句

2022-01-14 15:40:00 113

原创 八皇后问题(dfs)

n− 皇后问题是指将 n 个皇后放在 n×n 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。现在给定整数 n,请你输出所有的满足条件的棋子摆法。输入格式共一行,包含整数 n。输出格式每个解决方案占 n 行,每行输出一个长度为 n 的字符串,用来表示完整的棋盘状态。其中 . 表示某一个位置的方格状态为空,Q 表示某一个位置的方格上摆着皇后。每个方案输出完成后,输出一个空行。注意:行末不能有多余空格。输出方案的顺序任意,只要不重复且

2022-01-13 18:11:16 557

原创 排列数字 基础(dfs)

给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。输入格式共一行,包含一个整数 n。输出格式按字典序输出所有排列方案,每个方案占一行。数据范围1≤n≤7输入样例:3输出样例:1 2 31 3 22 1 32 3 13 1 23 2 1dfs 递归注意1.判重2.恢复现场#include<iostream>using namespace std;int n;bool st[10];

2022-01-13 18:08:54 165

原创 lowbit

#include<iostream>using namespace std;int main(){ int n; cin>>n; while(n--) { int t; cin>>t; int cnt=0; while(t) { t -=t&(-t); ++cnt; }

2022-01-03 14:18:00 275

原创 判断子序列

给定一个长度为 n 的整数序列 a1,a2,…,an 以及一个长度为 m 的整数序列 b1,b2,…,bm。请你判断 a 序列是否为 b 序列的子序列。子序列指序列的一部分项按原有次序排列而得的序列,例如序列 {a1,a3,a5} 是序列 {a1,a2,a3,a4,a5} 的一个子序列。输入格式第一行包含两个整数 n,m。第二行包含 n 个整数,表示 a1,a2,…,an。第三行包含 m 个整数,表示 b1,b2,…,bm。输出格式如果 a 序列是 b 序列的子序列,输出一行 Y

2022-01-03 14:16:03 413

原创 基础 约数个数

思路如下:首先 依旧利用了分解质因数我们把每一个 数x 分解成为 p1,p2…并且记录下来每一个质因子出现的次数(这里指的是一共)例如 4 和8 那么我们2一共出现了5次会记为5之后我们可以利用p1…pn 来重组约数任意个质因子的乘积仍然是原数的约数任意一种不同的组合也必然组合出来一种不同的约数(这也是质因子的优点所在)例子:p1 :10p2: 15…那么我们可以选择0-10个p10-15个p2最后利用乘法原理乘起来就好了#include<iostream>#i

2021-09-02 16:11:06 80

原创 最大公约数 中式和西式

首先是中式/*首先把a,b中的所有偶数因子去掉然后使用gcd(x,y)=gcd(min(x,y),max(x,y)-min(x,y))计算出来*/#include<iostream>using namespace std;int gcd_china(int x,int y){ int r=0; while(x&1!=1&&y&1!=1){ x/=2,y/=2,++r; } while(1){

2021-09-02 15:51:22 96

原创 基础算法 shichu

求约数基本就是个模拟,其中注意 j<=x/j这个条件保证了时间复杂度在lg级别因为约数是成对出现的#include<iostream>#include<vector>#include<algorithm>using namespace std;int main(){ int n; cin>>n; for(int i=0;i<n;++i) { vector<int> ans

2021-09-02 15:45:37 157

原创 基础算法 筛质数

选择的是埃式筛法相对上手比线性筛法快一点而且大部分时候够用https://www.acwing.com/solution/content/14136/线性筛上面链接基本思路:证明:后面的合数一定会在遍历到之前被筛掉反证:首先假设有个合数x 由于是合数,他一定可以分解为质数的乘积的形式(除了1)那么他一定是某个小于他的质数的整数倍所以一定已经被筛掉了推出来矛盾所以我们只需要每次使用找到的质数筛掉后面他的整数倍的所有数即可若一个数没被筛掉证明他不能被前面的质数表示 故一定他也是质数#inc

2021-09-02 15:38:33 106

原创 基础算法 分解质因数

循环里面的 i 一定是一个质数:假如 i 是一个合数,那么它一定可以分解成多个质因子相乘的形式,这多个质因子同时也是 a 的质因子且比 i 要小,而比 i 小的数在之前的循环过程中一定是被条件除完了的,所以 i 不可能是合数,只可能是质数#include<iostream>using namespace std;void is_prime(int a){ bool flag=1; for(int i=2;i<=a/i;++i) if(a%i==0)

2021-09-02 15:26:26 71

原创 最大异或对 模板题目,t树

相当于为每一个数 的每一位建立一个节点由于每个数最多32为所以M开这么大注意:异或的时候从高位选择才能选择出来最大的每一步首先看一下树中有没有与本位相反的位(这样的话异或值为1)有的话走过去否则只能走向相同节点#include<iostream>#include<cstring>using namespace std;const int N=1e5+10,M=N*32;int son[M][2],idx;void insert(int a){ i

2021-09-02 15:12:56 54

原创 矩阵乘法加上快速幂 基础模板题

在斐波那契数列中,Fib0=0,Fib1=1,Fibn=Fibn−1+Fibn−2(n>1)。给定整数 n,求 Fibnmod10000。输入格式输入包含多组测试用例。每个测试用例占一行,包含一个整数 n。当输入用例 n=−1 时,表示输入终止,且该用例无需处理。输出格式每个测试用例输出一个整数表示结果。每个结果占一行。数据范围0≤n≤2×109```cpp#include<iostream>#include<cstring>using name

2021-09-02 15:03:46 79

原创 最低通行费

/*那么必须在2*n-1的时间内出去也就意味着他只能赶路要么向下要么向右这无非就是上面摘花生的题目变成取最小值在这里试一下把使用s[len][j]不对啊,,,,,试了下发现画蛇添足注意:这上一道道题目不是不需要边界而是边界直接是0就行,0小于上一题所有的w所以在求最大值问题了已经足够了,当然也可以设为-INF而这道题目有必要先做一些边界不然的话,他是为了选择最小值所以我们要设置一下边界biru设置memset(f,1e9,sizeof f);这样他就不会从不该转移的地方转移过来了其实可能出错的

2021-08-03 09:24:20 237

原创 2021-08-03

/*只能向东走或者向南走多组数据我们可以定义 s[len][j],或者s[i][j]s[len][j]的话是我们当前走了len步 并且向东走了j步s[i][j]是我们走到i,j所有的走法我们发现这样表示集合的话我们是可以直接在集合的角度或者说层面上解决问题的这样显然时间复杂度会大大降低自己感悟:一开始先尝试比较大的集合划分,如果无法计算尝试变小hhh最差不过爆搜吗这里使用s[len][j]应该效率更高因为集合更大我们来试一下,不对好像一样啊,不试了*/#include<io

2021-08-03 09:13:14 53

原创 愤怒的小鸟

/*思路:首先这是一个重复覆盖问题我们把每一个点都看成一个二进制位这一类状态压缩重要的就是预处理本题的预处理:path数组:path[i][j]是表示那个过i,j小猪的抛物线,值是一个 state 表示这个抛物线可以打掉那些小猪这里涉及到抛物线,首先是解出来a,b在之后是依次判断哪个小猪可以被打掉,抛物线要满足开口向下,并且斜率不能是无穷再之后是常规又不一样的dps[state]是打掉这个状态的所有抛物线组合方式首先这里的f[state]是表示要打掉这个状态的这些小猪所需要的最小次数

2021-07-30 09:08:12 76

原创 皇后问题hhhh

/*第一种按照行进行枚举,那么我们不需要再枚举行只需要三个bool来记录这一列这一对角线还有副对角线有没有皇后即可一旦行数大于等于n则证明成功了一种方案将之push注意状态恢复*/#include<bits/stdc++.h>using namespace std;char c[15][15];bool yy[15],dg[19],udg[19];int n;void dfs(int x){ if(x>=n){ for(int i=0;i&

2021-07-24 20:46:49 138

原创 2021-07-23

/*dfs 从一开始int x为当前有多少个数字一个st记录那些被搞过了,注意状态恢复*/#include<bits/stdc++.h>using namespace std;int n;vector<int> temp;vector<vector<int>>res;bool st[9];void dfs(int x){ if(x>n){ res.push_back(temp); ret

2021-07-24 20:38:39 46

原创 整数划分啊

/*一个正整数 n 可以表示成若干个正整数之和,形如:n=n1+n2+…+nk,其中 n1≥n2≥…≥nk,k≥1。我们将这样的一种表示称为正整数 n 的一种划分。现在给定一个正整数 n,请你求出 n 共有多少种不同的划分方法。输入格式共一行,包含一个整数 n。输出格式共一行,包含一个整数,表示总划分数量。由于答案可能很大,输出结果请对 109+7 取模。数据范围1≤n≤1000分首先,对于0的划分方式是1种即所有的数都不选定义s[i,j] 为从前i个数种选择来划分j(包括i)f

2021-07-18 19:39:53 207

原创 石子合并啊

/*设有 N 堆石子排成一排,其编号为 1,2,3,…,N。每堆石子有一定的质量,可以用一个整数来描述,现在要将这 N 堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。例如有 4 堆石子分别为 1 3 5 2, 我们可以先合并 1、2 堆,代价为 4,得到 4 5 2, 又合并 1,2 堆,代价为 9,得到 9 2 ,再合并得到 11,总代价为 4+9+11=24;如果第二步是先

2021-07-18 19:27:26 73

原创 最长公共子序列

给定两个长度分别为 N 和 M 的字符串 A 和 B,求既是 A 的子序列又是 B 的子序列的字符串长度最长是多少。输入格式第一行包含两个整数 N 和 M。第二行包含一个长度为 N 的字符串,表示字符串 A。第三行包含一个长度为 M 的字符串,表示字符串 B。字符串均由小写字母构成。输出格式输出一个整数,表示最大长度。数据范围1≤N,M≤1000这道题S[i,j]含义是第一个字符串以i或者其前面的为尾巴,第二个以j或之前为尾巴时,最大的公共子序列集合f【i,j】是这个集合向外表现出的属

2021-07-18 11:52:09 96

原创 2021-07-18上升子序列

给定一个长度为 N 的数列,求数值严格单调递增的子序列的长度最长是多少。输入格式第一行包含整数 N。第二行包含 N 个整数,表示完整序列。输出格式输出一个整数,表示最大长度。数据范围1≤N≤1000,−109≤数列中的数≤109#include<bits/stdc++.h>using namespace std;const int N=1005;int f[N],a[N];int main(){ int n; cin>>n; fo

2021-07-18 11:13:06 93

原创 数字三角形

给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。 7 3 88 1 02 7 4 44 5 2 6 5输入格式第一行包含整数 n,表示数字三角形的层数。接下来 n 行,每行包含若干整数,其中第 i 行表示数字三角形第 i 层包含的整数。输出格式输出一个整数,表示最大的路径数字和。数据范围1≤n≤500,−10000≤三角

2021-07-18 10:58:22 96

原创 2020.7.17

分组背包问题有 N 组物品和一个容量是 V 的背包。每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行有两个整数 N,V,用空格隔开,分别表示物品组数和背包容量。接下来有 N 组数据:每组数据第一行有一个整数 Si,表示第 i 个物品组的物品数量;每组数据接下来有 Si 行,每行有两个整数 vij,wij,用空格隔开,分

2021-07-17 12:13:27 96 2

原创 2021-07-17

多重背包问题有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。输出格式输出一个整数,表示最大价值。数据范围0<N≤10000<V≤20000<vi,wi

2021-07-17 12:12:19 115 2

原创 完全背包问题

完全背包问题有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。第 i 种物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 种物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<vi,wi≤1000有 N 种物品

2021-07-17 12:10:59 118 1

原创 2021-07-14

dp01背包问题有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值0<N,V≤10000<vi,wi≤1000输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。输出格式输出一个整数,表示最大价值。题解:1#incl

2021-07-14 21:35:10 56

空空如也

空空如也

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

TA关注的人

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