acm从入门到放弃——day3

  1. 第一次打表还有些小紧张
个人理解:打表主要用于答案相对固定和原本代码时间复杂度较为高,容易运行超时的题,
比如素数,回文数这些是不会变的可以用打表法。对于规定范围内有固定比例的数字的选择也可用打表法。

**此法属于变态暴力法,非万不得已,还是少用为好**
不然你以后只是会简单暴力的想和解决问题,能不暴力就不暴力
主要做法:将要求的东西通过暴力枚举求出,再存在一个数组里。至此表打好了。。。
下面我没把表贴上因为实在是太长了嘻嘻

在这里插入图片述
在这里插入图片描述

  1. dfs算法

dfs算法,即深度优先算法(Depth First Search)。理解深搜的重要关键点是在于解决“现在该怎么做”。至于“接下来该怎么做”和“现在该怎么做”是一样的

参考大佬的链接(https://blog.csdn.net/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;

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值