当前位置: 首页 > wzjs >正文

青岛建网站公司长沙网站推广和优化

青岛建网站公司,长沙网站推广和优化,企业网站建设规划ppt,迅雷资源做下载网站见:P1025 [NOIP 2001 提高组] 数的划分 - 洛谷 题目描述 将整数 n 分成 k 份,且每份不能为空,任意两个方案不相同(不考虑顺序)。 例如:n7,k3,下面三种分法被认为是相同的。 1,1,…

见:P1025 [NOIP 2001 提高组] 数的划分 - 洛谷

题目描述

将整数 n 分成 k 份,且每份不能为空,任意两个方案不相同(不考虑顺序)。

例如:n=7,k=3,下面三种分法被认为是相同的。

1,1,5;
1,5,1;
5,1,1.

问有多少种不同的分法。

输入格式

n,k (6<n≤200,2≤k≤6)

输出格式

1 个整数,即不同的分法。

输入输出样例

in:
7 3out:
4

说明/提示

四种分法为:
1,1,5;
1,2,4;
1,3,3;
2,2,3.

【题目来源】

NOIP 2001 提高组第二题

这道题如果思路想明白了,剩下的很简单!
拿到题目一看就是深度优先搜索的剪枝技巧。

首先普及一下这种算法:

因为搜索算法的时间复杂度大多都是指数级的,

所以在比赛或者考试中很少用到,

即使是简单的搜索,

时间复杂度也令人无法忍受,

所以就要加入一些优化技巧,

比如深搜的剪枝技巧

一、剪枝策略的寻找的方法

1)微观方法:从问题本身出发,发现剪枝条件。

2)宏观方法:从整体出发,发现剪枝条件。

3)注意提高效率,这是关键,最重要的。  

总之,

剪枝策略,

属于算法优化范畴;

通常应用在DFS 和 BFS 搜索算法中;

剪枝策略就是寻找过滤条件,

提前减少不必要的搜索路径。

二、剪枝优化三原则

正确、准确、高效。

原则 :搜索算法,

绝大部分需要用到剪枝。

然而,

不是所有的枝条都可以剪掉,

这就需要通过设计出合理的判断方法,

以决定某一分支的取舍。

在设计判断方法的时候,

需要遵循一定的原则。

 1) 正确性 :

正如上文所述,

枝条不是爱剪就能剪的。

如果随便剪枝,

把带有最优解的那一分支也剪掉了的话,

剪枝也就失去了意义.。

所以,

剪枝的前提是一定要保证不丢失正确的结果。

2)准确性 :

在保证了正确性的基础上,

我们应该根据具体问题具体分析,

采用合适的判断手段,

使不包含最优解的枝条尽可能多的被剪去,

以达到程序“最优化”的目的。

可以说,剪枝的准确性,

是衡量一个优化算法好坏的标准。

3)高效性 :

设计优化程序的根本目的,

是要减少搜索的次数,

使程序运行的时间减少。

但为了使搜索次数尽可能的减少,

我们又必须花工夫设计出一个准确性较高的优化算法,

而当算法的准确性升高,其判断的次数必定增多,

从而又导致耗时的增多,这便引出了矛盾。

因此,如何在优化与效率之间寻找一个平衡点,

使得程序的时间复杂度尽可能降低,同样是非常重要的。

倘若一个剪枝的判断效果非常好,

但是它却需要耗费大量的时间来判断、比较,

结果整个程序运行起来也跟没有优化过的没什么区别,这样就太得不偿失了。

三、深度优先搜索的优化技巧

1 优化搜索顺序:

在一些搜索问题中,

搜索树的各个层次,

各个分支之间的顺序是不固定的。

不同的搜索顺序会产生不同的搜索树形态,

其规模大小也相差甚远。

2 排除等效冗余:

在搜索过程中,

如果我们能够判定从搜索树的当前节点上沿着某几条不同分支到达的子树是等效的,

那么只需要对其中的一条分支执行搜索。

3 可行性剪枝(上下界剪枝):

该方法判断继续搜索能否得出答案,

如果不能直接回溯。

在搜索过程中,

即使对当前状态进行检查,

如果发现分支已经无法到达递归边界,

就执行回溯。

4 最优性剪枝:

最优性剪枝,

是一种重要的搜索剪枝策略。

它记录当前得到的最优值,

如果当前结点已经无法产生比当前最优解更优的解时,

可以提前回溯。

5 记忆化:

可以记录每个状态的搜索结果,

再重复遍历一个状态时直接检索并返回。

这好比我们对图进行深度优先遍历时,

标记一个节点是否已经被访问过。

关于本题

就如前面所说,

想要进行深搜剪枝,

就要确定剪枝的上下界,

想要确定上下界,

一般会根据约束条件。

本体的约束条件:

由于分解出来的数字不考虑顺序,

所以我们假设分解的数字依次递增,

所以扩展节点时不能小于前一个扩展节点的值,

即a[i-1]<=a[i],这就是“下界”

假设我们已经将N分解成了a[1]加到a[i-1],

则下一个数的最大值是将i-k这k-i+1个数平均分,

即m/k-i+1,

这就是“上界”。

代码详解:

cin>>n>>m;
a[0]=1;
dfs(1);

这里是输入和深搜的阶段,将分解出来的数组的第一个置为1

if(n==0) return ;

这里是深度搜索的结束条件,也就是数被分完了

​if(k==m){if(n>=a[k-1]) s++;return ;
}

这里是处理异常情况,分出第K份

​for(int i=a[k-1];i<=n/(m-k+1);i++){a[k]=i;n-=i;dfs(k+1);n+=i;
}

这里是根据第K份的上下界来求出第K份的值

code

#include<bits/stdc++.h>
using namespace std;
int n,m,a[8],s=0;
void dfs(int k) {if(n==0) return ;if(k==m) {if(n>=a[k-1]) s++;return ;}for(int i=a[k-1]; i<=n/(m-k+1); i++) {a[k]=i;n-=i;dfs(k+1);n+=i;}
}
int main() {cin>>n>>m;a[0]=1;dfs(1);cout<<s<<endl;return 0;
}

听说给点赞,关注,收藏的人会发财哦(灬~ω~灬) 

http://www.dtcms.com/wzjs/517127.html

相关文章:

  • 包头有没有专业做淘宝网站的惠州seo关键词推广
  • 宠物网站设计的代码市场营销策划公司
  • 大连网站哪家做的好排名首页服务热线
  • 即便你卖的是网站优化就是搜索引擎优化
  • 万域网站建设网络营销的方式与手段
  • 河南工程建设信息网站冯耀宗seo视频教程
  • 今天最新消息优化系统
  • 云南省城乡与住房建设厅网站友情链接联盟
  • 社区网站设计策划书3000字济源新站seo关键词排名推广
  • 网站制作协议书营销软件排名
  • 网站代理备案百度网址大全官方网站
  • 建设手机网站赚钱吗销售管理软件
  • 长沙网站运营外包公司全国疫情高峰感染高峰
  • 做网站建设推广好做吗新闻发布最新新闻
  • 框架型网站世界足球排名前十名
  • 揭阳中小企业网站制作4a广告公司
  • 武汉互联网网站建设公司企业线上培训平台
  • 海搜网做的网站怎么样各种手艺培训班
  • 东莞疫情情况 最新消息衡阳seo优化
  • wordpress怎么开放注册seo到底是什么
  • 网页的网站导航怎么做荆州seo推广
  • 本机网站建设河南品牌网站建设
  • 海拉尔做网站多少钱太原竞价托管公司推荐
  • 我要用新浪云做网站谷歌seo服务
  • 移动网站怎么做服务器租用
  • 网站开发有几种语言搜索引擎营销方案例子
  • 网站建设比较好郑州网站建设价格
  • 网站建设开发背景抚顺优化seo
  • 域名停靠性seo首页排名优化
  • 阿里巴巴国际站客服电话武汉seo招聘网