【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在武汉集训.他想给这两位兄弟买点什么 ...
随机推荐
- ssh-add 报错 Could not open a connection to your authentication agent
ERROR: [root@testcentos01 ~]# ssh-add Could not open a connection to your authentication agent 在shel ...
- [原] perforce 获取本地最近更新的Changelist
获取perforce客户端最后一次sync的changelist, 前提是中间没有任何代码提交: http://stackoverflow.com/questions/47007/determinin ...
- Struct2 自定义拦截器
1 因为struct2 如文件上传,数据验证等功能都是由系统默认的 defalutStack中的拦截器实现的,所以我们定义拦截器需要引用系统默认的defalutStack 这样才不会影响struct2 ...
- vsftp在REDHAT,CENTOS 5中登录慢的解决办法
vsftp在REDHAT,CENTOS 5中登录慢的解决办法 vsftp在REDHAT,CENTOS 5中不仅登录慢,至少花30秒左右,而且上传文件的速度也受影响, 经过摸索,根本原因在DNS解析上花 ...
- CPU/ABI显示No system images installed for this target的解决方案
CPU/ABI显示No system images installed for this target的解决方案 手动下载image http://www.androiddevtools.cn/ SD ...
- ios 沙盒 NSCoding(相当于JAVA对象序列化) 归档 数据存储
通过NSCoding能实现像JAVA一样能够实现对象的序列化,可以保存对象到文件里. NSCoding 跟其他存储方式略有不同,他可以存储对象 对象存储的条件是: 对象需要遵守 NSCoding 协议 ...
- C Primer Plus 第3章 数据和C 编程练习
1. /* 整数上溢 */ #include <stdio.h> int main(void) { ; unsigned ; /* 无符号整数j像一个汽车里程指示表(形容的太好了,可参考& ...
- 360 chrome不能登录Google账户
用过Google chrome,枫树,360 chrome国际版,今天还是回到Google chrome了. 因为除了Chrome自己,其他的都不能正常登录Google账户(偶尔偶尔一次可以,直到今天 ...
- lintcode 中等题:N Queens II N皇后问题 II
题目: N皇后问题 II 根据n皇后问题,现在返回n皇后不同的解决方案的数量而不是具体的放置布局. 样例 比如n=4,存在2种解决方案 解题: 和上一题差不多,这里只是求数量,这个题目定义全局变量,递 ...
- 欧拉工程第63题:Powerful digit counts
题目链接 The 5-digit number, 16807=75, is also a fifth power. Similarly, the 9-digit number, 134217728=8 ...