集训第二天(2017/8/1):第一次做比赛

本文分享了作者在深度优先搜索(DFS)方面的学习经历,包括解决数的拆分问题及数的排列问题的具体实现代码,并表达了对DFS算法进一步掌握的决心。

      今天上午还是练习深度优先搜索的几道例题,虽然这种方法的原理理解了,但做题还是做不出来,老是出错,真的是“纸上得来终觉浅”啊哭大哭。还有今天下午第一次做比赛,做到怀疑人生......可能是这几天深搜做多了,见着题就往深搜方面想,结果把一道递推题和数论题都按深搜做的,加上水平有限,没能AC。这个周集中突破dfs!!!

     还是附上今天上午练的dfs代码:

eg1.任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。
当n=7共14种拆分方法:
7=1+1+1+1+1+1+1
7=1+1+1+1+1+2
7=1+1+1+1+3
7=1+1+1+2+2
7=1+1+1+4
7=1+1+2+3
7=1+1+5
7=1+2+2+2
7=1+2+4
7=1+3+3
7=1+6
7=2+2+3
7=2+5
7=3+4
total=14
#include<iostream>
using namespace std;
int a[10001]={1};//a[]用来保存每个拆分成的数
int n,total;//n代表要拆分的数,total代表方案总数
int search(int,int);//搜索
int print(int);//打印结果
int main()
{
    cin>>n;
    search(n,1);
    cout<<"total="<<total<<endl;
    return 0;
}
int print(int t)
{
    cout<<n<<"=";
    for(int i=1;i<=t-1;i++)
       cout<<a[i]<<"+";
       cout<<a[t]<<endl;
       total++;
}
int search(int s,int t)//t代表当前拆分成的数的序号,s代表当前要拆分的数
{
    int i;
    for(i=a[t-1];i<=s;i++)//i表示拆分成的数,i大于等于它的前一个数并且小于等于当前的要拆分的数
    if(i<n)//当前的数i要大于等于前一个数且小于n,这个条件是为了排除i=n这个情况,因为n=n这一情况不符合要求
    {
        a[t]=i;//保存当前拆分的数i
        s-=i;//s减去当前拆分的数i,s将继续拆分
        if(s==0)print(t);
        else search(s,t+1);//当s>0,继续搜索
        s+=i;//回溯:加上拆分的数,以便产生所有可能的拆分
    }
}
eg2.数的排列

设有n个整数的集合{1,2,…,n},从中取出任意r个数进行排列(r<n),试列出所有的排列。
#include<iostream>
#include<iomanip>
using namespace std;
int n,r;
int a[10001];//记录数字
bool b[10001]={0};//记录该数字是否已被应用,未被应用记为0
int search(int);
int print();
int main()
{
    cin>>n>>r;
    search(1);//从k=1开始搜索,直到k=r停止
    return 0;
}
int search(int k)
{
    for(int i=1;i<=n;i++)//在搜索的每一层都有n个子树,共有k层(即k步)
    if(!b[i])//如果数i没被应用
      {
          a[k]=i;//第k步保存数i
          b[i]=1;
          if(k==r)print();
          else search(k+1);
          b[i]=0;
      }
}
int print()
{
    for(int i=1;i<=r;i++)
    cout<<setw(3)<<a[i];
    cout<<endl;
}

DFS的题,题解能看懂,但要是自己做还真做不出来,明天接着练!还有希望后天的练习赛别像今天这样惨...

  

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值