- 第一次打表还有些小紧张
个人理解:打表主要用于答案相对固定和原本代码时间复杂度较为高,容易运行超时的题,
比如素数,回文数这些是不会变的可以用打表法。对于规定范围内有固定比例的数字的选择也可用打表法。
**此法属于变态暴力法,非万不得已,还是少用为好**
不然你以后只是会简单暴力的想和解决问题,能不暴力就不暴力
主要做法:将要求的东西通过暴力枚举求出,再存在一个数组里。至此表打好了。。。
下面我没把表贴上因为实在是太长了嘻嘻
- dfs算法
dfs算法,即深度优先算法(Depth First Search)。理解深搜的重要关键点是在于解决“现在该怎么做”。至于“接下来该怎么做”和“现在该怎么做”是一样的
参考大佬的链接(https://blog.youkuaiyun.com/Apro1066/article/details/81515714)
//选数
//深搜
#include <iostream>
#include<math.h>
#include <string.h>
#include<algorithm>
using namespace std;
int team,num;
const int Max=25;
//判断素数
bool isprime(int k)
{
int temp = sqrt(k);
for (int i = 2; i <=temp; i++)
{
if ( k % i == 0)
return false;
}
return true;
}
int pnum = 0;
unsigned int a[Max];
bool vis[25];
void dfs(int m, int sum, int startx)
{
if (m == num)
{
if (isprime(sum))
pnum++;
return;
}
for (int i = startx; i < team; i++)
{
if (vis[i])
continue;
vis[i] = true;
dfs(m + 1, sum + a[i], i + 1);
vis[i] = false;
}
return;
}
int main()
{
memset(a,0,sizeof(a));
if(isprime(49))
cout<<49<<endl;
/*cin>>team>>num;
for (int i = 0; i < team; i++)
cin >> a[i];
dfs(0, 0, 0);
cout <<pnum;*/
// system("pause");
return 0;
}