算法
文章平均质量分 54
平平无奇的问题制造小能手
这个作者很懒,什么都没留下…
展开
-
2021 ICPC Asia EC网络预选赛I、II
1.题意:2.题解:3.ac代码:在这里插入代码片1.题意:2.题解:3.ac代码:在这里插入代码片1.题意:2.题解:3.ac代码:在这里插入代码片1.题意:2.题解:3.ac代码:在这里插入代码片1.题意:2.题解:3.ac代码:在这里插入代码片1.题意:2.题解:3.ac代码:在这里插入代码片1.题意:2.题解:3.ac代码:在这里插入代码片1.题意:2.题解:3.ac代码:在这里插入代码片1.题意:2.原创 2021-10-06 22:14:52 · 526 阅读 · 0 评论 -
2021-08-01 acwing算法基础课 动态规划
AcWing 2. 01背包问题1.题意:2.题解:3.ac代码:在这里插入代码片AcWing 3. 完全背包问题1.题意:2.题解:3.ac代码:在这里插入代码片AcWing 4. 多重背包问题1.题意:2.题解:3.ac代码:在这里插入代码片AcWing 5. 多重背包问题 II1.题意:2.题解:3.ac代码:在这里插入代码片AcWing 9. 分组背包问题1.题意:2.题解:3.ac代码:在这里插入代码片AcWing 898. 数字三角形原创 2021-08-03 19:58:02 · 146 阅读 · 0 评论 -
2021-01-19Winter Camp 2021 Training 6训练
一.1.题面:2.题解:3.ac代码:#include<stdio.h>#include<bits/stdc++.h>#include<iostream>#include<string.h>#include<stdlib.h>#define N 300010using namespace std;typedef long long ll;int dp[N];int a[N];int main(){ int t,n,i,原创 2021-02-07 14:46:14 · 240 阅读 · 0 评论 -
2021-02-03 0x01 基本算法-位运算
一.a^b%c1.题意:2.题解:3.ac代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;ll quick_pow(ll a,ll b,ll c) { ll ans = 1; while(b) { if(b&1) ans = (ans * a) % c; a = (a*a) % c; b >>原创 2021-02-03 23:28:18 · 92 阅读 · 0 评论 -
2021-02-01树形DP
一.1.题意:2.题解:3.ac代码:在这里插入代码片1.题意:2.题解:3.ac代码:在这里插入代码片1.题意:2.题解:3.ac代码:在这里插入代码片原创 2021-02-01 23:21:33 · 63 阅读 · 0 评论 -
2021-01-25训练
一.A. Suborrays1.题意:一组序列是好的,如果满足(pi OR pi+1 OR … OR pj−1 OR pj)≥j−i+1,给n,数组为【1,n】2.题解:让数组中某一段连续的数的或运算>=它的长度pi or pi+1 or… or pj >=max(pi,pi+1,…,pj)鸽巢原理如果存在一段长度为len的区间,里面的数是【1,len-1】,显然不可能只出现一次,所以必有一个数>=len,j-i+1即为len,所以任意数组排序均满足要求3.ac原创 2021-01-25 22:27:05 · 109 阅读 · 0 评论 -
2021-01-24区间DP
一.石子合并1.题解:区间dp,采用平行四边形优化原理2.ac代码:奇怪的是N为2000的时候dev不出数据,可能是时间太长了?但是牛客网就过了N等于20的时候dev就没毛病了#include<stdio.h>#include<bits/stdc++.h>#include<iostream>#include<string.h>#include<stdlib.h>#define N 2000#define INF 1&原创 2021-01-25 04:04:36 · 148 阅读 · 0 评论 -
2021-01-13Winter Camp 2021 Training 3训练题解
contest一.A. Phoenix and Balance1.大意:有n个数,分别是从2到2^n,将他们随机分成2堆(每堆都是n/2个),保证n是偶数,让两堆n/2个数的和的差最小2.题解:找规律,发现分成一堆为:2n/2,2n/2+1,…,2n-1,(共n/2个数),另一堆为·:21,22,…2n/2-1,2n,这种情况两边和相差最小推公式得:2n/2+1-2用pow会T,用了快速幂看了别人的方法,发现也可以是前一个数*2+2,实质差不多3.ac代码:#include原创 2021-01-16 21:43:16 · 269 阅读 · 0 评论 -
2021-01-15DP
一.点菜问题1.题面:2.题解:01背包问题3.ac代码:#include<stdio.h>#include<bits/stdc++.h>#include<iostream>#include<string.h>#include<stdlib.h>//long long int dp2[400000],dp1[400000],a[400000];using namespace std;typedef long long原创 2021-01-15 23:55:25 · 96 阅读 · 1 评论 -
2021-01-11DP(补)
一.最长公共子序列1. 题面:2. 题解:如果s1的第i个字符和s2的第j个字符一样,dp[i][j]=dp[i-1][j-1]+1,如果不同,就等于max(dp[i-1][j],dp[i][j-1])3. ac代码:#include<stdio.h>#include<bits/stdc++.h>#include<iostream>#include<string.h>#include<stdlib.h>//long long原创 2021-01-13 19:22:21 · 104 阅读 · 0 评论 -
2021-01-28 贪心
一.简单贪心1.贪心:反证和归纳2,分类:(1)先处理:先排序再遍历模拟出最优(2)边处理边选择:「我们每次都取 XXX 中最大/小的东西,并更新 XXX。」(有时「XXX 中最大/小的东西」可以优化,比如用优先队列维护)3.egeg1.国王游戏排序处理找出最优, 要用到高精度乘除bool cmp(dachen x,dachen y){ return x.a*x.b<y.a*y.b;}eg2,工作调度边处理边选择#include<iostream>#i原创 2021-01-12 23:15:08 · 90 阅读 · 0 评论 -
2021-01-12动态规划的最长xx子序列问题
一. 第二题1.题面:2.题解: 以为是01背包,测试样例正确但是段错误,“但是这个题目没办法直接用动态规划,因为这个和会非常非常大,导致状态空间过大,会内存溢出,所以最后AC的代码还是用了搜索+剪枝,直接搜索所有可能的选择”用·剪枝的dfs,回头补补充:关于getline函数: getline 的 C++ 函数。此函数可读取整行,包括前导和嵌入的空格,并将其存储在字符串对象中。 getline 函数如下所示:getline(cin, inputLine);原创 2021-01-12 22:13:47 · 97 阅读 · 0 评论 -
2021-01-10背包问题
1.问题A:装箱问题题面:题解:1.逆向处理,是该题的正向处理,即dp数组初始化为背包大小,每放入一个减去相应的容量,对于第i个物体,选择放:dp[i][j-a[i]]-a[i]或者不放dp[i-1][j],dp[i][j]为前i个物体恰好装进容量为j的背包时的v-这部分容量的最小容量。(每一个直接用v减去当前最大的容量)2.正向处理,即常规的dp[i][j]表示前i个物体恰好装进容量为j的背包所能获得的最大价值,最后再用V减去最终最大。化为一维数组,逆向枚举j#include<stdi原创 2021-01-10 23:39:29 · 127 阅读 · 0 评论 -
DP
1.:[钢条切割问题](https://www.cnblogs.com/mengwang024/p/4342796.html)都是分为r(n)=r(i)+r(n-i)(1)自上而下递归:调用函数,传入n-i,找到最大的r(n)向上返回,记忆化r(n)相当于树型结构,从最大的找到最小的,层层向上返回。(2)自下向上递推,相当于横表,找到比i小的前j中,最优方案,12关于重构解(输出方案):转移的时候记录最优子结构的位置。再做一个数组记录最优的j,向前找坐标2矩阵链乘法原创 2020-12-29 23:27:27 · 70 阅读 · 0 评论 -
排序
排序——查找的预处理,降低时间复杂度一.具体排序实现1.选择排序选择排序(英语:Selection sort)是排序算法的一种,它的工作原理是每次找出第 i 小的元素(也就是 A(i~n)中最小的元素),然后将这个元素与数组第 个位置上的元素交换。不稳定,时间复杂度是O(n^2)void selection_sort(int* a, int n) { for (int i = 1; i < n; ++i) { int ith = i; for (int j = .原创 2020-12-10 00:11:44 · 114 阅读 · 0 评论 -
2021-01-22分治
力扣分治练习1.数组中第K个最大元素(1)方法一:堆 维护一个堆,时间复杂度O(nlogk),调整堆O(logk),空间复杂度O(k) 1.小根堆: 堆内只有k容量,一旦超过就把最小的(即队首元素推出),遍历完数组后只剩下最后k大的数,队首元素是第k大数2.大根堆: 做k-1次删除后,队首元素即为第k大stl实现class Solution {public: int findKthLargest(vector<int>& nums, in原创 2020-12-09 22:32:33 · 62 阅读 · 0 评论 -
枚举、
1.枚举熄灯问题解析1 熄灯问题解析2自己写的代码:#include <stdio.h>#include <string.h>#include <stdlib.h>#include <ctype.h>#include <map>#include <algorithm>#include<cstring>#include<iostream>using namespace std;int a原创 2020-12-09 11:00:26 · 46 阅读 · 0 评论 -
斐波那契数列
1.斐波那契数列原创 2020-12-06 20:59:17 · 72 阅读 · 0 评论 -
函数模板、重载操作符
1.Template//函数模板template <typename T>T qp(T a,ll n){ T ans=1; while(n){ if(n&1) ans*=a; a*=a; n>>=1; } return ans;}int main(){ int a=qp<int>(2,3); cout<<a<<endl;}2.重载操作符3,内联函数4.结构体构造函数...原创 2020-12-05 19:53:33 · 89 阅读 · 0 评论 -
优先队列、堆
1.优先队列详解2堆原创 2020-12-04 18:32:19 · 59 阅读 · 0 评论 -
约瑟夫问题、圆桌问题
为了方便,我们设一开始的 n n n 个人的编号为 0 0 0 ~ n − 1 n-1 n−1。那么把第 k k k 个人干死之后(注意,第 k k k 个人的编号应该是 k − 1 k-1 k−1),队伍变成了:k , k + 1 , k + 2 , ⋯   , n − 2 , n − 1 , 0 , 1 , ⋯ k,k+1,k+2,\cdots,n-2,n-1,0,1,\cdots k,k+1,k+2,⋯,n−2,n−1,0,1,⋯然后会从第 k k原创 2020-12-03 13:39:18 · 276 阅读 · 1 评论 -
指针、malloc
1.malloc函数 如果分配成功:则返回指向被分配内存空间的指针 不然,返回空指针NULL。 同时,当内存不再使用的时候,应使用free()函数将内存块释放掉。 malloc的返回值是一个指针,指向一段可用内存的起始地址 int *p; p = new int; //返回类型为int *类型,分配的大小为sizeof(int) p = new int[100]; //返回类型为int *类型,分配的大小为sizeof(int) * 100原创 2020-11-02 18:19:54 · 394 阅读 · 0 评论 -
简单博弈论、一些刷题指南
1.简单博弈论 Nim游戏补充 这样的游戏被称为Nim游戏: 1、有两个玩家,轮流进行操作 2、是公平游戏。即面对同一局面两个玩家所能进行的操作是相同的。例如中国象棋 不是公平游戏。因为面对同一个局面,红方只能移动红色棋子而不能移动黑方棋子,黑房同理。 3、一个玩家是输掉当且仅当他无法进行操作。例如如果是两个人轮流取石子的游戏,那么一个玩家输掉当且仅当他面前没有石子了。因为他下面无法进行取石子的操作。 一般的,Nim游戏指两个玩家轮流在好几堆东西中取物品,不能夸堆取,无法原创 2020-11-03 10:08:55 · 100 阅读 · 0 评论 -
STL一些笔记
1.set关于set,必须说明的是set关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。#includeset<类型> 变量名//s.end()没有值,指向最后一个元素的后一个位置set中关于clear和erase的一些用法为何每次insert之后,以前保存的iterator不会失效? iterator这里就相当于指向节点的指针,内存没有变,指向内存的指针怎么会失效原创 2020-11-09 10:53:21 · 60 阅读 · 0 评论 -
高精度学习
1.高精度除法1高精度除法22.高精度加减法3原创 2020-11-12 11:40:12 · 109 阅读 · 0 评论 -
蔡勒公式、三角函数
蔡勒公式原创 2020-11-22 00:01:38 · 309 阅读 · 0 评论 -
最长上升/不降序子序列
1.最长不降子序列(1)(2)优化nlogn(3)求序列详解(4)二分查找的函数有 3 个:lower_bound(起始地址,结束地址,要查找的数值) 返回的是数值 第一个 出现的位置。upper_bound(起始地址,结束地址,要查找的数值) 返回的是 第一个大于待查找数值 出现的位置。binary_search(起始地址,结束地址,要查找的数值) 返回的是是否存在这么一个数,是一个bool值。注意:使用二分查找的前提是数组有序。int low=lower_bound(t.be原创 2020-11-17 22:58:09 · 86 阅读 · 0 评论 -
KMP算法
1.KMP详解int next[20];void getnext(char s){ int j,k; j=0;k=-1; next[j]=k; while(j!=strlen(s)){ if(k==-1||s[j]==s[k]){ if(s[j+1]==s[k+1]){ next[j+1]=next[k+1]; } else{ next[j+1]=next[j]+1; } j++; k++; }else{原创 2020-11-24 23:54:36 · 54 阅读 · 0 评论 -
树状数组
1.树形数组2.树形数组3.这里利用的负数的存储特性,负数是以补码存储的,对于整数运算 x&(-x)有● 当x为0时,即 0 & 0,结果为0;●当x为奇数时,最后一个比特位为1,取反加1没有进位,故x和-x除最后一位外前面的位正好相反,按位与结果为0。结果为1。●当x为偶数,且为2的m次方时,x的二进制表示中只有一位是1(从右往左的第m+1位),其右边有m位0,故x取反加1后,从右到左第有m个0,第m+1位及其左边全是1。这样,x& (-x) 得到的就是x。●当x原创 2020-12-03 13:35:19 · 155 阅读 · 0 评论 -
二分、位运算、异或、引用变量
1.C++引用变量2,二分3.位运算原创 2020-11-23 21:24:10 · 73 阅读 · 0 评论