【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在武汉集训.他想给这两位兄弟买点什么 ...
随机推荐
- running android lint has encountered a problem
最近写学习android编程的的时候,每次保存.java文件的时候,总会跳出如下错误 解决:
- sql server2012 动态端口
我们查询 exec sp_readerrorlog 0, 1, "listening" 时可以看有端口监听,有1433 1434 53698等. 这时我们可以打看配置管理器,查看 ...
- Robot Framework 环境搭建
一.下载软件 1.安装Python 到官网,下载Python 2.7.9:https://www.python.org/downloads/,最好选择32位版本的(64位系统也支付32位版本),然后安 ...
- Lua 代码编写技巧
1.克隆表 u = {unpack(table)} 一般克隆长度较小的表 2.判断表是否为空 if next(t) == nil then.. 判断该表是否为空,包括t={}的情况 3.插入表 使用 ...
- UVA 10523 Very Easy!!!(大数据加法、乘法)
题意:给出N,A,计算i*A^i(i=1~N)的和.1<=N<=30,0<=A<=15. 就是大数据运算,别的没什么,注意细节之处即可. 这题还要注意两个地方: 1.考虑A=0 ...
- 搭建hadoop环境,在win7的eclipse上远程操作(Linux上)hadoop2.6.0出错的一些总结
问题1:在DFS Lcation 上不能对文件进行操作: 解决方法: 在hadoop上的每个节点上修改该文件 conf/mapred-site.xml,增加: <property> < ...
- Openfire 代码部署报错: Variable references non-existent resource:${workspace_loc:openfire_src}
Variable references non-existent resource:${workspace_loc:openfire_src} -DopenfireHome=“${workspace_ ...
- leetcode 4 : Median of Two Sorted Arrays 找出两个数组的中位数
题目: There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the ...
- ibatis缓存初探(1)
一,IBATIS 缓存机制使用 1,sqlMapConfig.xml中配置 1.SqlMapConfig.xml中 <settings cacheModelsEnabled="tr ...
- C#调用Win32 api学习总结
从.NET平台调用Win32 API Win32 API可以直接控制Microsoft Windows的核心,因为API(Application Programming Interface)本来就是微 ...