![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
搜索问题
1
追随远方的某R
世界在等待我所寻找的答案
展开
-
每日一题(深搜索+枝剪,DP+组合数学)
组合数学思路+DP实现整数划分组合数学思路:设想n个数分为k份是n个小球分入k个箱子中那么就可以分为两种情况数量1.至少一个箱子里只有一个小球2.没有任何箱子里只有一个小球对1至少一个箱子有一个小球的情况和n-1个小球放入k-1个箱子的组合数相同对2为确保没有任何箱子只有一个小球,那么把每个箱子都拿出去一个小球然后再分也就是和把n-k个小球分到k个箱子里的情况是一样的。注意1.当小球还没箱子数量多时自然方案为02.初始化n个箱子分n个球方案为1得出状态转移方程dp[i][j]原创 2021-11-03 19:48:26 · 85 阅读 · 0 评论 -
暑假学习——队列与BFS
BFS和队列,这两种东西的实现方式非常像,以hdu1312为例此题中我们需要从起点开始,不断向外围扩散,扩散的过程中所有第一次遇到的黑砖都是我们需要记录的对象。那么就有如下三种解释第一种图形解释第二种,树状图形解释第三种,根据树状图形来的文字解释起点1入队 {1}第一步:1出队,2,3入队 {2,3}第二步:2,3出队4 5 6和7 8分别入对{4,5,6,7,8}第三步:4出 9入 5出10入 6出11入 8出 7出13 12入{9,10,11,13,12}第四步:1原创 2021-08-01 12:26:44 · 133 阅读 · 0 评论 -
暑假学习 递归
特点:自我反复调用优点:写出来比较简洁,节省时间通过全排列来体会一下普通来讲全排列可以通过多重的循环来搞定,比如3个数的全排列写个三重循环然后避免重复就可以。但是如果是10个数呢,编程序难道要像码农一样编一大堆吗?这个问题可以用STL中的next_permuation()来解决,但是还有很多问题没有现成的模板,这时候为了让代码简介高效就要用到递归。#include <bits/stdc++.h>using namespace std;#define Swap(a,b){int原创 2021-07-27 07:25:30 · 111 阅读 · 0 评论 -
递归练习3
求n的k次幂#include <iostream>using namespace std;bool flag=true;int sum;int key(int n,int k){ if(flag) { sum=n; flag=false; } if(k>1) { sum*=n; } else return sum; return原创 2021-07-29 11:03:10 · 147 阅读 · 0 评论 -
关于递归的一点想法
之前写过一个斐波那契数列的递归,上午又看到了一个小孩吃糖,糖的总数一定,每天可以吃1-2个,问把糖吃完有几种方案。关于这两个题,先看看代码斐波那契#include <iostream>using namespace std;int key(int n){ if(n==1||n==2) { if(n==1) return 0; else return 1; } r原创 2021-08-01 21:19:28 · 76 阅读 · 0 评论 -
暑假学习 递归2
累加类型1.第一个人10岁,第二个人比第一个人大两岁,以此类推,问第m个人的年龄递归方法:#include <iostream>using namespace std;int num=0,con=0; int key(int n,int f) { if(n==con) { return num; } else { con++; num=f+2; key(n,原创 2021-07-27 12:48:55 · 152 阅读 · 0 评论 -
BFS练习,八数码问题
按照书上的说,BFS之前那种属于是统计数目,而这次的八数码问题则是寻找状态,寻找一种我们需要的状态,在这个状态找到了之后我们就会结束整个搜索过程。八数码问题在分析的过程中也会有树状图形解释。那么根据之前所做的队列我们写一下#include <iostream>#include <bits/stdc++.h>using namespace std;int board1[3][3],board2[3][3],num,x,y;bool flag[3][3]={true};原创 2021-08-03 15:59:08 · 228 阅读 · 0 评论