![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
紫书
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 · 187 阅读 · 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 · 191 阅读 · 0 评论 -
[Day Zero] 7.1-2 最大乘法(Maximum Product,UVa 11059)
There for you.-----------------------------若枚举每个起点和终点,则复杂度为n!,枚举量达到18!是负数阻碍了连续相乘,最大乘积只可能在负数前后或末尾产生,因此只需要在负数处计算乘积。记忆每个负数之前的序列的乘积和,并在遇到每一个负数的时候判断一下是第奇数个还是第偶数个,若是第奇数个则不乘上它本身,偶数个则乘上它本身,判断一下末尾的总乘积和最后原创 2018-01-09 18:31:42 · 228 阅读 · 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 · 147 阅读 · 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 · 242 阅读 · 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 · 949 阅读 · 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 · 193 阅读 · 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 · 153 阅读 · 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 · 330 阅读 · 0 评论