暴力枚举总结
暴力!!
训练(洛谷题单):【算法1-3】暴力枚举 - 题单 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
注意:计算时间复杂度,解题常TLE
1.循环枚举
没啥好说的,多写,善用STL,比如sort排序,unique去重
附上大佬的笔记:C++STL中的unique函数解析 - Excaliburer - 博客园 (cnblogs.com)
2.子集枚举
套模板~
例题:P1036 [NOIP2002 普及组] 选数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
模板&题解:
1 #include <bits/stdc++.h> 2 using namespace std; 3 int arr[1000010]; 4 bool check(int x) 5 { 6 for (int i = 2; i <=sqrt(x); i++) 7 if (x % i == 0) return 0; 8 return 1; 9 } 10 int main() 11 { 12 int n, m; 13 scanf("%d%d", &n, &m); 14 for (int i = 0; i < n; i++) scanf("%d", &arr[i]); 15 int U = 1 << n; 16 int ans = 0; 17 for (int s = 0; s < U; s++) 18 { 19 if (__builtin_popcount(s) == m) 20 { 21 int sum = 0; 22 for (int i = 0; i < n; i++) 23 if (s & (1 << i)) sum += arr[i]; 24 if (check(sum)) ans++; 25 } 26 } 27 cout << ans << endl; 28 return 0; 29 }
3.排列枚举
重点:STL(next_permutation)使用
模板:
1 //头文件#include<bits/stdc++.h>/#include<algorithm> 2 do { 3 cout<<arr[1]<<" "<<arr[2];//这里写想要输出的内容以及做选择 4 } while (next_permutation(arr + 1, arr + 1 + n));//范围内数组全排列
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下