博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【DFS】NYOJ-325-zb的生日
阅读量:6997 次
发布时间:2019-06-27

本文共 1985 字,大约阅读时间需要 6 分钟。

【题目链接:NYOJ-325】

  一道以我名字命名的题目,难道要我生日的时候再A?

  思路:依旧深搜,但这个问题应该有一个专有名词吧,看别的博客说是 “容量为 sum/2 的背包问题”,不懂。。。

1 // abs()  对应头文件 stdlib.h 返回int参数  2 // fabs() 对应头文件 math.h   返回double参数  3 #include
4 #include
5 #include
6 int W[22],sum,m,n; 7 void dfs(int cur,int total){ 8 int t =abs(sum - total * 2); 9 if(t < m) 10 m = t;11 if(cur == n){12 // int t =abs(sum - total * 2);13 // if(t < m)14 // m = t;15 return;//递归边界 16 } 17 if(total > sum / 2){ //剪枝 18 // int t =abs(sum - total * 2);19 // if(t < m)20 // m = t;21 return;22 }23 dfs(cur + 1,total + W[cur]); //结点分支。加,右分支 24 dfs(cur + 1,total); //节点分支。不加,左分支 25 } 26 int main(){ 27 while(~scanf("%d",&n)){28 memset(W,0,sizeof(W));29 sum = 0;30 m = 10001;31 for(int i = 0;i < n;i++){32 scanf("%d",&W[i]);33 sum += W[i];34 }35 dfs(0,0);36 printf("%d\n",m);37 }38 return 0; 39 }

  渐渐对搜索有了一些认识,刚开始完全无头绪,要多练习,加油!

  最优解:

    也就是动脑筋剪枝。

1 #include
2 #include
3 #include
4 using namespace std; 5 6 int a[25]; 7 int s[25]; 8 int n; 9 int V;10 int ans;11 12 void DFS(int i,int v)13 {14 if(i==n+1)15 {16 ans=max(ans,v);17 return;18 }19 //如果背包已经装满,则不再考虑其他情况。20 //如果背包中已有物品加上现有可选物品的总重量都不大于已知的最优解,则剪枝21 if(ans==V||v+s[n]-s[i-1]<=ans)22 return;23 if(a[i]+v<=V)24 {25 DFS(i+1,v+a[i]);26 }27 DFS(i+1,v);28 }29 30 int main()31 {32 while(scanf("%d",&n)==1)33 {34 s[0]=0;35 for(int i=1;i<=n;i++)36 {37 scanf("%d",&a[i]);38 s[i]=s[i-1]+a[i];39 }40 V=s[n]/2;41 ans=0;42 DFS(1,0);43 ans=s[n]-ans-ans;44 printf("%d\n",ans);45 }46 return 0;47 }

 

  

转载地址:http://qoavl.baihongyu.com/

你可能感兴趣的文章
java基础--java静态代码块和静态方法的区别、static用法
查看>>
zabbix邮箱告警的详细配置
查看>>
使用基本ACL规则限制用户登录
查看>>
linux 文件查看命令 文件和目录属性
查看>>
由我主讲的软件测试系列视频之性能测试系列视频讲座目录出炉了
查看>>
dropdownlist用法
查看>>
二分查找、二分查找小于等于key的最后一个元素、二分查找大于等于key的第一个元素...
查看>>
PGA的调整建议
查看>>
C#进行Visio二次开发相关事件汇总
查看>>
安装fontconfig2.4.2时make报错解决
查看>>
试析软件测试的错觉及发展方向
查看>>
QTP自动化测试自学手册V2.0版本
查看>>
80后收入是怎样一个水平?看完网友工资单,对不起 拖大家内裤了
查看>>
有关软件测试的五大谣言
查看>>
find(2)
查看>>
jquery-1.4.4.min.js无法解析json中result.data问题
查看>>
php字符串大小写转换
查看>>
linux怎么不输入路径直接运行程序脚本
查看>>
日志信息log
查看>>
扩大VMware虚拟机中CentOS 7的硬盘空间
查看>>