2017年ACM模板(常用)弱渣整理 一、暴力
来源:互联网 发布:软件成熟度等级 编辑:程序博客网 时间:2024/06/04 18:22
一、 枚举排列
生成指定集合的排列:
#include<cstdio>#include<iostream>#include<algorithm> using namespace std;void print_per(int n,int *P,int *A,int cur){ if(cur==n) { for(int i=0;i<n;i++) { printf("%d ",A[i]); } printf("\n"); } else for(int i=0;i<n;i++) { if(!i||P[i]!=P[i-1])//最少递归一次,如1,1,1只递归一次 { int c1=0,c2=0; for(int j=0;j<cur;j++) { if(A[j]==P[i]) c1++;//统计c1 } for(int j =0;j<n;j++) { if(P[j]==P[i]) c2++;//统计c2 } if(c1<c2) { A[cur] = P[i]; print_per(n,P,A,cur+1); } } }}int main(){ int P[20]; int A[20]; int n; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&P[i]); } sort(P,P+n); print_per(n,P,A,0); return 0;}
next_ permutation():
#include<cstdio>#include<algorithm>using namespace std;int main(){ int n,p[10]; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&p[i]); } sort(p,p+n); do{ for(int i=0;i<n;i++) printf("%d ",p[i]); printf("\n"); }while(next_permutation(p,p+n)); return 0; }
二、 子集生成:
递归:
void print_subset(int n,int* A,int cur){ for(int i=0;i<cur;i++) printf("%d ",A[i]);//打印当前集合 printf("\n"); int s = cur?A[cur-1]+1:0;//确定当前元素的最小可能值 for(int i=s;i<n;i++) { A[cur] = i; print_subset(n,A,cur+1);//递归构造子集 }}
位向量法:
void print_subset(int n,int *B,int cur){ if(cur==n){ for(int i=0;i<n;i++) if(B[i]) printf("%d ",i); printf("\n"); return; } B[cur]=1; print_subset(n,B,cur+1);//选第cur个元素 B[cur]=0; print_subset(n,B,cur+1);//不选第cur个元素 }
二进制法:
#include<cstdio>using namespace std;void print_subset(int n,int s){ for(int i=0;i<n;i++) { if(s&(1<<i)) printf("%d ",i);//二进制的位运算 } printf("\n");}int main(){ int n; scanf("%d",&n); for(int i=0;i<(1<<n);i++) print_subset(n,i); return 0; }
0 0
- 2017年ACM模板(常用)弱渣整理 一、暴力
- 2017年ACM模板(常用)弱渣整理 二、二分
- 2017年ACM模板(常用)弱渣整理 三、图论
- 2017年ACM模板(常用)弱渣整理 四、动态规划
- 2017年ACM模板(常用)弱渣整理 五、数学相关
- 模板整理(一)
- ACM模板整理
- ACM常用函数整理
- ACM自用常用模板(c++版)
- ACM常用模板
- acm常用模板
- * ACM 有用的练习题整理 (一)
- ACM模板(个人代码集整理)(持续更新)
- ACM Battle(巧妙暴力)
- ACM竞赛常用STL(一)
- ACM竞赛常用STL(一)
- ACM算法模板 · 一些常用的算法模板-模板合集(打比赛专用)
- ACM算法模板 · 一些常用的算法模板-模板合集(打比赛专用)
- String直接赋值和new一个对象的理解
- neo4j 入门教学_2
- neo4j入门开发,以及在sns关系中的应用(原创)
- 微信小程序-template模版
- android集成第三方支付
- 2017年ACM模板(常用)弱渣整理 一、暴力
- what is spring boot
- 用CHttpFile实现简单的GET/POST数据
- 转:推荐系统十条经验和教训
- vbs脚本学习整人Demo
- 高仿微信案例整理
- ubuntu查看支持的字体库
- 友元类
- Android实现文字一个一个显示出来