dfs201107-01 hold住是什么意思思

搜索专题01
简单应用 (深搜剪枝)
搜索专题01
简单应用 (深搜剪枝)
我们今天来看道比较奇葩的简单搜索题…
是一道 USACO的铜组题....是一道英文题 大家要自己翻译一下
USACO BRONZE Bookshelf 2
Farmer John recently bought another bookshelf for the cow library,
but the shelf is getting filled up quite quickly, and now the only
available space is at the top.
FJ has N cows (1 &= N &= 20) each with some height of H_i (1 &= H_i
&= 1,000,000 - these are very tall cows). The bookshelf has a height
of B (1 &= B &= S, where S is the sum of the heights of all cows).
To reach the top of the bookshelf, one or more of the cows can stand
on top of each other in a stack, so that their total height is the
sum of each of their individual heights. This total height must be
no less than the height of the bookshelf in order for the cows to
reach the top.
Since a taller stack of cows than necessary can be dangerous, your
job is to find the set of cows that produces a stack of the smallest
height possible such that the stack can reach the bookshelf. Your
program should print the minimal ‘excess’ height between the optimal
stack of cows and the bookshelf.
本题的大概意思是给出n和b,然后给出n个数,用这n个数中的某些,求出一个和,这个和是&=b的最小值,输出最小值与b的差。
01.第一想法是01背包的处理 在正常看来 这是一种比较优的做法,但是这就需要你高超的技巧了,一维数组的优化,以及对空间的限制(本题的空间为64M),时间的优化等等等等......复杂度就是一普通01背包的复杂度...这里不再赘述....(还是注意点为好,我第一次就MLE了)
02.对于这类比较普通的问题来说,暴搜在一定程度上是万能的,那么今天就来说一说如何最优的搜索..
首先,我们得确定要搜什么,拿什么搜 本体当然就是搜一下第一个大于且差最小的即可…..
其次 合理的剪枝将为你的搜索优化到极点(本题的优化。。。自己想吧,我没优化)
最后 注意边界 递归 必须注意的事情 不能有闪失
值得提示的是 有的时候状态时需要还原的 有时候千万不要还原 具体情况具体分析
我先把此题的代码给你们
#include &bits/stdc++.h&
int a[30], cn[30], n, b,
void dfs(int x, int sum)
if(sum + cn[n] - cn[x] & b) return;
if(sum &= b)
if(minex & sum-b) minex = sum-b;
dfs(x+1, sum);
dfs(x+1, sum+a[x+1]);
int main()
while(cin&&n&&b)
for(int i = 1; i &= i++)
scanf("%d", &a[i]);
cn[0] = 0;
for(int i = 1; i &= i++)
cn[i] += cn[i-1]+a[i];
dfs(0, 0);
printf("%d\n", minex);
最后扯一句
你们敢相信你
本题01背包慢的要死 深搜0ms轻松过…….
来来来 我预报一下
下一篇是做蛋糕
想看剪枝的敬请期待
我的热门文章
即使是一小步也想与你分享201107施耐德电气完整版01.doc_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
201107施耐德电气完整版01.doc
上传于||文档简介
&&201107施耐德电气完整版
阅读已结束,如果下载本文需要使用2下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩17页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢算法(17)
本篇博文着重用dfs解决著名的背包问题
01背包问题要点在:选与不选。所以我们很容易联想到dfs来解决这个问题!
下面我们来看看是如何实现的:
&strong&&span style=&font-size:24&&&strong&#include&iostream&
const int N=30;
int w[N],value[N],n,maxvalue=0,V;
void dfs(int index,int sumw,int sumv)
if(index&n)
if(sumw&=V&&sumv&maxvalue)
dfs(index+1,sumw+w[index],sumv+value[index]);//选
dfs(index+1,sumw,sumv);//不选
int main()
cin&&n&&V;
for(int i=1;i&=n;++i)
cin&&w[i];
for(int i=1;i&=n;++i)
cin&&value[i];
dfs(1,0,0);
cout&&maxvalue&&
}&/strong&&/span&&/strong&
但是注意到一个问题没有?总是把n件物品选完后才去更新最大值,忽视了总重不超过V的条件,所以,我们可以来优化一下。
void dfs(int index,int sumw,int sumv)
if(index&n)
dfs(index+1,sumw,sumv);//不选
if(sumw+w[index]&=V)
if(sumv+value[index]&maxvalue)
maxvalue=sumv+value[index];
dfs(index+1,sumw+w[index],sumv+value[index]);//选
}这样,算法时间复杂度在一定程度上减轻了很多,这种根据题目条件来修改递归边界的方法叫做剪枝。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:42190次
排名:千里之外
原创:47篇
文章:18篇
阅读:33131
(1)(14)(8)(3)(2)(18)(3)lovelace521 的BLOG
用户名:lovelace521
文章数:117
评论数:221
访问量:718860
注册日期:
阅读量:5863
阅读量:12276
阅读量:381251
阅读量:1073337
51CTO推荐博文
实验环境:如下图所示:
四台服务器:windows
Enterprise Edtion 英文版
客户端:windows 7 中文 旗舰版
网段配置:
Dc01:192.168.10.10/24 DNS 192.168.10.10
Dc02:192.168.10.11/24 DNS 192.168.10.11
Dfs01: 192.168.10.12/24 DNS :192.168.10.10 192.168.10.11
Dfs02:192.168.10.13/24 DNS:192.168.10.10 192.168.10.11
Win 7 client : 192.168.10.14 DNS : 192.168.10.10 192.168.10.11
需要注意的几点:
一、建议DFS双机上建立相同的文件夹,以便于区分
二、建议先把权限的规划做好,要不在建立DFS的同时去想着怎么划分文件夹对应
权限,会是很头疼的一件事
三、DFS的设备双机要一致,避免因设置不同而引起未知的错误问题
由于DC建立我们已经完成,下面我们对DFS01和DFS02进行设置
打开服务管理器,点击roles ------Add roles 添加File services
网络系统文件服务是为了能支持UNIX客户端能访问我们的文件服务器的可以不选;windows search 服务是为了跟sharepoint跟windows 搜索功能集成,基本上也很少人有用,可以不选;网络文件branchcache功能也可以不选,这个是与windows 7的branchcache功能集成使用的,xp客户端无法使用,更多想了解branchcache功能的朋友可以去technet上详细查阅,这个功能其实比较好的,但是一本企业内网环境里可能还用不上,可以不选。7 [: d$ O" ~: j# X
需要配置一个DFS的命名空间、也就是这个文件服务器的标示
这里我们选择基于域的命名空间,因为我们要与域集成。
这里需要一个用于来认证DFS的创建,我们采用域管理员账号
这里需要设置共享管理位置,可以更改的
配置磁盘监视
这里我们添加命名空间服务器,把DFSDC02添加进去,同样登陆DFSDC02上面,添加DFSDC01
打开DFS management,添加共享文件,注:在设置的过程中,可能会涉及到很多的文件夹命名和目录的命名,要分清相对路径的命名和绝对路径的命名,以免造成混淆,在后面的工作中造成不必要的麻烦。
添加共享文件,可以使本地的共享文件,也可以是网内任意一台机器上的共享文件,这里我们按照部门添加了三个共享目录,点击任意一个查看下状态为Enable,表示已经正常建立。
注:这里添加共享文件夹的时候,有两种模式进行选择,一种是只添加一个总的文件夹,命名为Fileserver,然后在Fileserver下添加基于公司部门的文件夹目录,这样的话,后期做同步复制的话方便管理员的操作,当然为了更为直观的看到公司有多少共享文件目录,你也可以按照部门逐个添加。这里我们选择按部门共享文件夹逐个添加。(实际生产中是怎么方便怎么来)
如果前期设置的时候没有定义好文件夹权限的问题,在页面中可以重新设置,这里文件夹权限的设置和基于NTFS共享模式文件服务器权限设置基本类似,都是基于组织单元和个人来定义对文件夹的读取权限。
共享文件夹添加好之后,我们要设置DFS能够同步复制,当其中一台机器Down掉之后,另外一台机器能够正常位用户提供访问。这里我们选择N01_design文件夹,右键点击新建文件夹目标,在弹出的页面中进行文件夹目标路径设置(也就是备份路径)
这里我们选择lovelacedc02上面的N01_design backup文件夹作为保存的路径选择
这里会弹出一个对话框,问你是否要创建一个复制组,保存两台机子进行同步,点击是进入下一步
添加复制组成员,这里也就是lovelacddfs01和lovelacedfs02两台机器
选择一台机器作为主要成员,这里我们选择lovelacedfs01作为主要成员
选择复制拓扑,按默认设置
这一步可以设置复制相关选项,可以自定义设置时间和复制方式,这里我们按默认设置,实时完全复制
创建成功,我们再次查看N01_design共享文件夹会发现,现在有两个路径。同理我们也可以对其他共享文件夹进行这样的设置,现在我们对文件同步复制进行测试,进入N01_design共享文件夹对应的绝对路径新建文件夹,然后切换到lovelacedfs02上查看N01_design backup文件夹对应的绝对路径的文件夹下是否进行了同步复制。点击N01_design对应的应用选项,我们可以看到N01_design和N01_design backup在DFS01和DFS02上对应的本例路径。
我们在DFS01下N01_design对应的文件夹下创建了三个文件夹,然后我们切换到DFS02上面查看数据是否进行同步
同步正常,下面我们在客户端测试,当DFS01down掉之后,我们是否能够正常访问N01_design文件下下面的文件,这里我们可以看到DFS01是活动的。DFS02是不活动的,下面我们关闭DFS01,再看下状态,可以看到状态切换到DFS02上面,切换过程有40秒的时间,有点慢。可能是虚拟机下模拟,配置什么的有点低的问题。
本文出自 “” 博客,谢绝转载!
了这篇文章
类别:┆阅读(0)┆评论(0)

我要回帖

 

随机推荐