【DFS】NYOJ-325-zb的生日
【题目链接:NYOJ-325】
一道以我名字命名的题目,难道要我生日的时候再A?
思路:依旧深搜,但这个问题应该有一个专有名词吧,看别的博客说是 “容量为 sum/2 的背包问题”,不懂。。。
// abs() 对应头文件 stdlib.h 返回int参数
// fabs() 对应头文件 math.h 返回double参数
#include<cstdio>
#include<cstring>
#include<stdlib.h>
int W[],sum,m,n;
void dfs(int cur,int total){
int t =abs(sum - total * );
if(t < m)
m = t;
if(cur == n){
// int t =abs(sum - total * 2);
// if(t < m)
// m = t;
return;//递归边界
}
if(total > sum / ){ //剪枝
// int t =abs(sum - total * 2);
// if(t < m)
// m = t;
return;
}
dfs(cur + ,total + W[cur]); //结点分支。加,右分支
dfs(cur + ,total); //节点分支。不加,左分支
}
int main(){
while(~scanf("%d",&n)){
memset(W,,sizeof(W));
sum = ;
m = ;
for(int i = ;i < n;i++){
scanf("%d",&W[i]);
sum += W[i];
}
dfs(,);
printf("%d\n",m);
}
return ;
}
渐渐对搜索有了一些认识,刚开始完全无头绪,要多练习,加油!
最优解:
也就是动脑筋剪枝。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; int a[];
int s[];
int n;
int V;
int ans; void DFS(int i,int v)
{
if(i==n+)
{
ans=max(ans,v);
return;
}
//如果背包已经装满,则不再考虑其他情况。
//如果背包中已有物品加上现有可选物品的总重量都不大于已知的最优解,则剪枝
if(ans==V||v+s[n]-s[i-]<=ans)
return;
if(a[i]+v<=V)
{
DFS(i+,v+a[i]);
}
DFS(i+,v);
} int main()
{
while(scanf("%d",&n)==)
{
s[]=;
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
s[i]=s[i-]+a[i];
}
V=s[n]/;
ans=;
DFS(,);
ans=s[n]-ans-ans;
printf("%d\n",ans);
}
return ;
}
【DFS】NYOJ-325-zb的生日的更多相关文章
- nyoj 325 zb的生日(dfs)
描述今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么庆祝生日,经过调查,zb发现C小加和never都很喜欢吃西瓜,而且一吃就是一堆的那种,zb ...
- nyoj 325 zb的生日
01背包 zb的生日 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄 ...
- nyoj 325——zb的生日——————【dp】
zb的生日 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么 ...
- nyoj 0325 zb的生日(dp)
nyoj 0325 zb的生日 zb的生日 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集 ...
- NYOJ之题目325 zb的生日
-------------------------------------- 刷一辈子水题... AC代码: import java.util.Scanner; public class Main { ...
- NY 325 zb的生日
假设所有西瓜重 Asum,所求的是用 Asum / 2 的背包装,最多装下多少. 刚开始用贪心作的,WA.后来用01背包,结果TLE,数据太大.原来用的是深搜! dfs(int sum, int i) ...
- zb的生日
http://acm.nyist.net/JudgeOnline/problem.php?pid=325 zb的生日 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 ...
- nyoj zb的生日【背包型DFS/选or不选】
zb的生日 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么 ...
- nyoj325 zb的生日(DFS)
zb的生日 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么 ...
- zb的生日(暴搜dfs)
zb的生日 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么 ...
随机推荐
- jquery-validation 学习总结
一.用前必备 项目主页:http://bassistance.de/jquery-plugins/jquery-plugin-validation/ API: http://jquery.bassis ...
- uva 514
栈的简单应用 /************************************************************************* > Author: xlc28 ...
- cf 363D
贪心加二分 虽然比赛后才过 ........ /************************************************************************* &g ...
- requireJS源码流程分析
- codeforces 295E Yaroslav and Points (离线操作+离散化+区间合并)
参考链接:http://blog.csdn.net/dyx404514/article/details/8817717 写的很详细,这里就不再赘述,附上我的代码. #include <iostr ...
- 关于Model层中Datetime Datetime? 默认值的问题
DateTime 和 DateTime?前者不允许为空,会有默认值,而DateTime?可以为Null 其他数值型同理!
- c# 组元(Tuple)
组元是C# 4.0引入的一个新特性,编写的时候需要基于.NET Framework 4.0或者更高版本.组元使用泛型来简化一个类的定义. 先以下面的一段代码为例子: public class Poin ...
- 深入浅出Java并发包—锁(Lock)VS同步(synchronized)
今天我们来探讨一下Java中的锁机制.前面我们提到,在JDK1.5之前只能通过synchronized关键字来实现同步,这个前面我们已经提到是属于独占锁,性能并不高,因此JDK1.5之后开始借助JNI ...
- [DLX]HDOJ4069 Squiggly Sudoku
题意:有9*9的格子 每个格子 由五部分组成:上(16).右(32).下(64).左(128).和该格的数值(0~9) 若上下左右有分割格子的线 就加上相应的数, 该格的数值若为0,则是未知 1~9 ...
- 李洪强iOS开发之OC语言description方法和sel
OC语言description方法和sel 一.description方法 Description方法包括类方法和对象方法.(NSObject类所包含) (一)基本知识 -description(对象 ...