文章目录
- C语言指针总结
- 一个关于c++string比较的问题
- string笔记
- 丑憨批的set笔记
- 丑憨批的vector笔记
- 动态规划解题套路框架
- [动态规划答疑篇-最优子结构+dp 数组的遍历方向](https://blog.csdn.net/weixin_44382711/article/details/109663715)
- 高楼扔鸡蛋
- 凑零钱问题
- 最长递增子序列
- 最长公共子序列LCS
- 编辑距离
- 博弈问题
- 动态规划-重叠区间2020.3.30
- 动态规划-KMP字符匹配算法
- 2020年蓝桥杯模拟赛2020.3.25直播笔记
- 第二十次CCF计算机软件能力认证总结
- 二分法记录
- 回溯法-框架+全排列+N皇后
- 回溯算法-排列/组合/子集
- 回溯算法-解数独
- 回溯算法-括号生成
- 2020.10.04蓝桥测试
- ACM取余
- [BFS 算法解题套路框架+几个用于BFS的set与queue用法和技巧](https://blog.csdn.net/weixin_44382711/article/details/109659022)
- 蓝桥杯省赛总结
- 动态规划和回溯算法到底谁是谁爹?
- 2021.3.10
- 蓝桥备赛
- [蓝桥备赛第一周2021.1.11 递归 枚举 位运算](https://blog.csdn.net/weixin_44382711/article/details/112466612)
- 前缀和
- [蓝桥备赛第二周 前缀和](https://blog.csdn.net/weixin_44382711/article/details/112743092)
- [蓝桥备赛第三周 倍增+贪心+素数+约数](https://blog.csdn.net/weixin_44382711/article/details/113128703)
- [蓝桥备赛第四周 同余+并查集](https://blog.csdn.net/weixin_44382711/article/details/113508129)
- 2021蓝桥直播课-软件类-本科组
- acm公选课
- 蓝桥突击:素数筛+并查集+KMP+前缀和2021.4.16
C语言指针总结
一个关于c++string比较的问题
//小心就是了
毕竟string有str.cmp,char a[] 也有c的strcmp:记得看看返回值
string笔记
str.substr(i,j))从下标为i截取j位,并返回
用printf输出string:printf("%s %s \n",a.c_str(),b.c_str());
string str.length char a[100] strlen(a)
丑憨批的set笔记
s.insert(buf);
s.clear();
s.count(buf);
set<int>::iterator it;
it=s.begin();
for(int i=1;i<s.size();i++)
{
cout<<*it<<" ";
it++;
}
cout<<*it<<endl;
列车调度:
if(s.lower_bound(buf)!=s.end())
{
s.erase(s.lower_bound(buf));//iterator
s.insert(buf);
}
string也可以用set
C++STL中的unique函数解析—unique也可以去重
重载运算符后的结构体组成set
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct A{
int a;
int b;
bool operator<(const A &l1)const{
if(this->a==l1.a){
return this->b<l1.b;
}else{
return this->a<l1.a;
}
}
};
set<A>sa;
int main()
{
sa.insert({1,10});
return 0;
}
丑憨批的vector笔记
VECTOR
v.push_back(user);
v.clear();
v.erase(v.begin()+pos);///vector是可以的
queue
front():第一个
queue.back():最后一个
push
pop()
empty()
swap(queue &other_q):将当前 queue 中的元素和参数 queue 中的元素交换。它们需要包含相同类型的元素。也可以调用全局函数模板 swap() 来完成同样的操作。
map
插入元素
// 定义一个map对象
map<int, string> mapStudent;
// 第一种 用insert函數插入pair
mapStudent.insert(pair<int, string>(000, "student_zero"));
// 第二种 用insert函数插入value_type数据
mapStudent.insert(map<int, string>::value_type(001, "student_one"));
// 第三种 用"array"方式插入
mapStudent[123] = "student_first";
mapStudent[456] = "student_second";
查找元素:count返回次数
当所查找的关键key出现时,它返回数据所在对象的位置,如果沒有,返回iter与end函数的值相同。
// find 返回迭代器指向当前查找元素的位置否则返回map::end()位置
iter = mapStudent.find("123");
if(iter != mapStudent.end())
cout<<"Find, the value is"<<iter->second<<endl;
else
cout<<"Do not Find"<<endl;
刪除与清空元素
//迭代器刪除
iter = mapStudent.find("123");
mapStudent.erase(iter);
//用关键字刪除
int n = mapStudent.erase("123"); //如果刪除了會返回1,否則返回0
//用迭代器范围刪除 : 把整个map清空
mapStudent.erase(mapStudent.begin(), mapStudent.end());
//等同于mapStudent.clear()
#include <iostream>
#include<bits/stdc++.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
map<int,int>m;
int main(int argc, char** argv) {
m[1]=2;
cout<<m[1]<<endl;
// cout<<m.find(1)!=m.end()<<endl;不对
cout<<m.count(1)<<endl;
cout<<m.count(2)<<endl;
cout<<m.erase(1)<<endl;
return 0;
}
out:
2
1
0
1
map中自定义结构体做key要重载–以dp map mem为例
struct a{
double name;
int i;
bool operator<(const a &l1) const{
if(this->i==l1.i){
return this->i<l1.i;
}else{
return this->name<l1.name;
}
}
};
map<struct a,int>memehanhan;
map<pair<double,int>,double>mem;
另外unordered_map运算更快
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define maxn 1005
struct A{
int a,b;
bool operator<(const A li)const{
if(this->a==li.a)
{
return this->b<li.b;
}else{
return this->a<li.a;
}
}
};
map<int,A>om;
unordered_map<int,A>um;
int main()
{
om[1]={2,2};
um[1]={1,2};
cout<<om[1].a<<endl;
cout<<om.count(1)<<endl;
return 0;
}
!!!蓝桥杯使用unordered_map 要加上:
蓝桥杯C++使用unordered_set和unordered_map报错如何处理
#include<tr1/unordered_map>//注意写法
using namespace std::tr1;//注意写法
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define maxn 1005
#include<tr1/unordered_map>//注意写法
using namespace std::tr1;//注意写法
struct A{
int a,b;
bool operator<(const A li)const{
if(this->a==li.a)
{
return this->b<li.b;
}else{
return this->a<li.a;
}
}
};
map<int,A>om;
unordered_map<int,A>um;
int main()
{
om[1]={1,2};
return 0;
}
stack
empty()堆栈为空则返回真
pop() 移除栈顶元素
push() 在栈顶增加元素
size() 返回栈中元素数目
top() 返回栈顶元素
动态规划解题套路框架
一定要想好是dp(m,n)还是mem[m,n]
套路第三部分不错
动态规划答疑篇-最优子结构+dp 数组的遍历方向
遍历的终点一定是要求的那个值的位置!
状态压缩:对动态规划进行降维打击
动态规划和回溯算法到底谁是谁爹?
高楼扔鸡蛋
凑零钱问题
有了更新的写法,小于零直接不返回,而是在选择的时候,如果发现小于0直接就continue,连函数都不调用
各种有趣的凑零钱
最长递增子序列
第n位的最长子序列,是往前面查的第一个比他小的子序列的+1
细节细节!!!!
最长公共子序列LCS
编辑距离
1.结束有两种
2.选择三种。
两串的动态规划,都用此思路,并建立二维dptable
博弈问题
动态规划-重叠区间2020.3.30
。。。。。贪心,排结束时间
动态规划-KMP字符匹配算法
2020年蓝桥杯模拟赛2020.3.25直播笔记
第二十次CCF计算机软件能力认证总结
二分法记录
回溯法-框架+全排列+N皇后
结束条件是到树叶时,还是if(n>fin)的写法快乐点
回溯算法-排列/组合/子集
回溯算法-解数独
回溯算法-括号生成
主动找结束条件,另外两个特殊条件其实可以在选择时剪掉的
另外这个题用0,0作为初始值会好写很多
2020.10.04蓝桥测试
跑步训练的模拟代码,单位要小些,能量大不大于600建个分支
矩阵 用回溯应该也可以做?i是上面一行,j是下面那一行,往里面填数?选择是两个循环?
ACM取余
BFS 算法解题套路框架+几个用于BFS的set与queue用法和技巧
这才是能记录步数的关键点
蓝桥杯省赛总结
动态规划和回溯算法到底谁是谁爹?
2021.3.10
动态规划一般是状态和选择----》数组dp[i][j][k] dp(i,j,k) 中的ijk一般是状态,选择一般选最****的,或者统计在basecase上+…等于新的值 并用记忆数组去除重复计算(但是还是比递推容易炸)
回溯法一般是深度和选择 ------》traceback(n) fin=… 用fin控制遍历(结束)深度,把可行解输出或保存
蓝桥备赛
蓝桥备赛第一周2021.1.11 递归 枚举 位运算
前缀和
蓝桥备赛第二周 前缀和
蓝桥备赛第三周 倍增+贪心+素数+约数
蓝桥备赛第四周 同余+并查集
2021蓝桥直播课-软件类-本科组
acm公选课
蓝桥突击:素数筛+并查集+KMP+前缀和2021.4.16
2021.4.17 :
1.需要背的代码单独放到一起,虽然现在这样也能都看,但还是不日常,放到一起,没事就看
2.如果允许的话一定要至少提前3天复习:一天dp一天回溯,一天总复习