【题目链接: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的生日的更多相关文章

  1. nyoj 325 zb的生日(dfs)

    描述今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么庆祝生日,经过调查,zb发现C小加和never都很喜欢吃西瓜,而且一吃就是一堆的那种,zb ...

  2. nyoj 325 zb的生日

    01背包 zb的生日 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄 ...

  3. nyoj 325——zb的生日——————【dp】

    zb的生日 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么 ...

  4. nyoj 0325 zb的生日(dp)

    nyoj 0325 zb的生日 zb的生日 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集 ...

  5. NYOJ之题目325 zb的生日

    -------------------------------------- 刷一辈子水题... AC代码: import java.util.Scanner; public class Main { ...

  6. NY 325 zb的生日

    假设所有西瓜重 Asum,所求的是用 Asum / 2 的背包装,最多装下多少. 刚开始用贪心作的,WA.后来用01背包,结果TLE,数据太大.原来用的是深搜! dfs(int sum, int i) ...

  7. zb的生日

    http://acm.nyist.net/JudgeOnline/problem.php?pid=325 zb的生日 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 ...

  8. nyoj zb的生日【背包型DFS/选or不选】

    zb的生日 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么 ...

  9. nyoj325 zb的生日(DFS)

    zb的生日 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么 ...

  10. zb的生日(暴搜dfs)

    zb的生日 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么 ...

随机推荐

  1. uva 12086 树状数组

    树状数组 #include <cstdio> #include <cstdlib> #include <cmath> #include <map> #i ...

  2. 安装 NoMachine(NX) client and server

    (1)Windows上直接安装nxclient-3.5.0-9.exe即可 (2)Linux上 准备linux rpms nxclient-3.5.0-7.x86_64.rpmnxnode-3.5.0 ...

  3. 已收录的帝国cms文章被误删除了怎么办?

    我们一直提倡网站要经常备份,但是有时也会遗忘,一不小心被谁删除了那就欲哭无泪了.就像ytkah刚弄了一个站,开了个权限比较高的后台帐号给别人用,居然把两三个栏目都删除了,想发狂啊.刚好又有段时间没备份 ...

  4. C#中 ? 和?? 的用法

    C#中 ?? 和? 的意思 1.? 如果直接定义一个 值类型,给负值null:就会提示“无法将 Null转换成‘值类型(比如:int)’,因为他是一种不可为null的值 de类型” 例如 int in ...

  5. Centos安装桌面环境

    刚开始装系统的时候,没有选Gnome或者KDE,现在想装个玩玩. 简单的安装可以参考这个:http://huruxing159.iteye.com/blog/744750 centos安装是是使用li ...

  6. lintcode :链表插入排序

    题目: 链表插入排序 用插入排序对链表排序 样例 Given 1->3->2->0->null, return 0->1->2->3->null 解题: ...

  7. 57. Insert Interval

    题目: Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if nec ...

  8. 1、探究java方法参数传递——引用传递?值传递!

    原创博文,转载请注明出处.谢谢~~ java程序运行时,其对象是怎么进行放置和安排的呢?内存是怎么分配的呢?理解好这个很有好处!java有5个地方可以存储数据: 1.寄存器.这是最快的存储区,位于处理 ...

  9. shell编程基础(2)---&&与||

    shell 编程重要的应用就是管理系统,对于管理系统中成千上万的程序而言,查询某个文件名是否存在,并且获取该文件名所指代文件基本信息是系统管理员的基本任务.shell命令可以很轻松的完成这项任务. # ...

  10. linux内核链表分析

    一.常用的链表和内核链表的区别 1.1  常规链表结构        通常链表数据结构至少应包含两个域:数据域和指针域,数据域用于存储数据,指针域用于建立与下一个节点的联系.按照指针域的组织以及各个节 ...