紫书
KArchi
这个作者很懒,什么都没留下…
展开
-
[Day 1] 7.2.2 生成可重集的排列(包括利用STL)
升天Time. -------------------------------- #include #include #include #include using namespace std; int n; int a[20],p[20],used[20],num[20]; void perm(int d){ if(!d) { for(i原创 2018-01-11 14:21:21 · 174 阅读 · 0 评论 -
[Day Zero] 7.2.1 生成1~n的排列
There for you. ------------------------------ 递归构造全排列,很经典的问题,从后n位的全排列-》后n-1位的全排列,一边构造,一边判重,符合就储存,注意,此处边判断边输出不好。 #include #include #include using namespace std; int n; bool used[20]; int a原创 2018-01-09 19:43:35 · 181 阅读 · 0 评论 -
[Day Zero] 7.1-2 最大乘法(Maximum Product,UVa 11059)
There for you. ----------------------------- 若枚举每个起点和终点,则复杂度为n!,枚举量达到18! 是负数阻碍了连续相乘,最大乘积只可能在负数前后或末尾产生,因此只需要在负数处计算乘积。记忆每个负数之前的序列的乘积和,并在遇到每一个负数的时候判断一下是第奇数个还是第偶数个,若是第奇数个则不乘上它本身,偶数个则乘上它本身,判断一下末尾的总乘积和最后原创 2018-01-09 18:31:42 · 216 阅读 · 0 评论 -
[Day Zero] 7.1-3 分数拆分 (Fractions Again?!,UVa 10976)
There for you. ----------------------------- y>k枚举到y=min(x,2k)=2k为止。 #include #include using namespace std; int k; //解决无限枚举 //枚举范围和剪枝同样重要 int main(){ while(cin>>k) for(int y=k+1;y原创 2018-01-09 19:11:01 · 139 阅读 · 0 评论 -
7-1 除法(Division,UVa 725)
#include #include #include using namespace std; int a[10],n,beichu; bool used[15],used1[15],have; bool judge(int num){ int t=0; for(int i=0;i used1[i]=used[i]; while(num){ if(!used原创 2018-01-08 14:05:56 · 230 阅读 · 0 评论 -
[Day 2] 7.4.1 八皇后问题 (全排列+数学解法)
刘X佳: 1、子集枚举模型 从64个格子中获得一个含8个格子的子集,使得该子集中任意一个格子都不在同一行/同一列/同一对角线上 子集共有2^64个,太多了 2、组合生成模型 枚举量转化为C8-64,仍然很多 3、全排列模型 优先满足每行每列不重复,排除不符对角线的情况 可以表示成每一行为一位,对应的列的编号是该位上的元素。故为1~8的全排列。 枚举量为A8-8,40320种,很小原创 2018-01-11 19:34:45 · 906 阅读 · 0 评论 -
[Day 1] 7.3.3 子集生成-二进制法
按位与 & 交集 按位或 | 并集 按位异或 ^ 对称差 ----------------------------------- #include #include using namespace std; int n,p[20]; void print_sub(int s){ for(int i=1;i if(s&(1 cout return ; }原创 2018-01-11 18:46:37 · 178 阅读 · 0 评论 -
[Day 1] 7.3.2 子集生成-位向量法
假设非可重集。 ----------------------------------- #include #include using namespace std; int n,p[20]; bool b[20]; void sub(int cur){ if(cur==n+1){//递归边界 for(int i=1;i if(b[i]) cout cout原创 2018-01-11 15:12:25 · 132 阅读 · 0 评论 -
[Day 1] 7.3.1 子集生成-增量构造法
升天Time. -------------------------------- #include #include #include using namespace std; int k,n; int s[20],p[20]; bool used[20]; void sub(int num){//num为元素个数 if(!num){//递归边界 for(in原创 2018-01-11 14:25:35 · 319 阅读 · 0 评论