位运算
- 左移/右移
左移:x<
- debug范例应用
#define debug(x) cerr << #x << ": " << x << endl;
#x:将()内内容换为字符串
补:
cout:标准输出流
cerr:错误输出流
cout.tie(0):输出会变快
- 位枚举
列举已知集合的子集):
首先外层循环,计算一共有几个子集,集合内有4个元素,所以一共有2^4=16种子集。每次i的值代表的二进制数中,1代表选中这一位代表的数字,由此构成16种子集。
然后是内层循环,j从0加到3,则是为了将i转化的二进制数上的位代表的数字输出。
接着将子集按从小到大排序
- STL容器vector、set简单应用
集合set——插入会默认从小到大排序
sets; s.insert(2); s.insert(1); for(int it:s) //类型 变量:容器 { cout < //c++11编译器使用auto,自动识别类型
for(auto it:s) //类型 变量:容器 { cout <
- vectorSTL容器,动态数组
vectorv; v.push_back(j + 1);//往数组后面放j+1 set、vector结合如下:
set> s;//set<数据类型> name 如上使用s.insert(v);可以得到子集按顺序排序的集合。如图
使用代码`for (vectorv : s) { for (int it : v) { cout << it << ' '; } cout << 'n'; }`
memset:数组统一赋值
memset(name,number,sizeof name)
递归的时间问题
如果是重复计算的值,算过一次之后存下来下一次直接用,不要重复计算



