ニャー雲荘喵の云的雪

暴力枚举总结

CloudCat·2022-02-18 23:54·105 次阅读

暴力枚举总结

暴力!!

训练(洛谷题单):【算法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));//范围内数组全排列

 

posted @   cloudcat233  阅读(105)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示