NYOJ-zb的生日

题目网址:http://acm.nyist.net/JudgeOnline/problem.php?pid=325

这道题解题的技巧类似NYOJ-1058部分和问题,就是代码第12行的位置:i 是从cur+1位置开始的。

这点是解决某一类问题的关键。此类题有一个共同之处就是:无序。拿这题来说就是:我从中选取一部分的数,

使得选中的和与剩下的和之差最小。我选中的这些数,不用管他的顺序怎么样,我直接从0位置开选就可以。如果

w[0]是问题解的一部分,那么我从剩下的再选即可。以w[0]为根的递归树中,再选择下一个可行的元素。

说的不怎么清晰,关键就一点:无序。才可以用这个技巧。

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int N,M,sum;
 4 int w[50];
 5 int flag[50];
 6 int cha;
 7
 8 void dfs(int cur,int sum_c){
 9     if(abs(sum - 2 * sum_c) < cha){
10         cha = abs(sum - 2 * sum_c);
11     }
12     for(int i = cur + 1; i < N; i++){
13         dfs(i,sum_c + w[i]);
14     }
15 }
16
17 int main(void){
18     int i;
19     while(scanf("%d",&N) != EOF){
20         M = N;
21         sum = 0; cha = 20000;
22         for(i = 0; i < N; i++){
23             scanf("%d",&w[i]);
24             sum += w[i];
25         }
26         for(int j = 0; j < N; j++){
27             dfs(j,w[j]);
28         }
29         printf("%d\n",cha);
30     }
31     return 0;
32 }
时间: 2024-10-24 01:24:30

NYOJ-zb的生日的相关文章

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

zb的生日 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么庆祝生日,经过调查,zb发现C小加和never都很喜欢吃西瓜,而且一吃就是一堆的那种,zb立刻下定决心买了一堆西瓜.当他准备把西瓜送给C小加和never的时候,遇到了一个难题,never和C小加不在一块住,只能把西瓜分成两堆给他们,为了对每个人都公平,他想让两堆的重量之差最小.每个西瓜的重量已知,你能帮

nyoj 325 zb的生日 【DP】||【DFS】

两种方法: 第一种:将总数一半当做背包,用总数-2*最多能装的数目就是所求: 第二种:深搜: zb的生日 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么庆祝生日,经过调查,zb发现C小加和never都很喜欢吃西瓜,而且一吃就是一堆的那种,zb立刻下定决心买了一堆西瓜.当他准备把西瓜送给C小加和never的时候,遇到了一个难题,never和C小加不在一块住,只能

NYOJ 325 ZB的生日

zb的生日 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么庆祝生日,经过调查,zb发现C小加和never都很喜欢吃西瓜,而且一吃就是一堆的那种,zb立刻下定决心买了一堆西瓜.当他准备把西瓜送给C小加和never的时候,遇到了一个难题,never和C小加不在一块住,只能把西瓜分成两堆给他们,为了对每个人都公平,他想让两堆的重量之差最小.每个西瓜的重量已知,你能帮

nyoj 325 zb的生日(dfs)

描述今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么庆祝生日,经过调查,zb发现C小加和never都很喜欢吃西瓜,而且一吃就是一堆的那种,zb立刻下定决心买了一堆西瓜.当他准备把西瓜送给C小加和never的时候,遇到了一个难题,never和C小加不在一块住,只能把西瓜分成两堆给他们,为了对每个人都公平,他想让两堆的重量之差最小.每个西瓜的重量已知,你能帮帮他么? 输入 多组测试数据(<=1500).数据以EOF结尾 第一行输入西瓜数量N

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

zb的生日 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么庆祝生日,经过调查,zb发现C小加和never都很喜欢吃西瓜,而且一吃就是一堆的那种,zb立刻下定决心买了一堆西瓜.当他准备把西瓜送给C小加和never的时候,遇到了一个难题,never和C小加不在一块住,只能把西瓜分成两堆给他们,为了对每个人都公平,他想让两堆的重量之差最小.每个西瓜的重量已知,你能帮

ACM zb的生日

zb的生日 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么庆祝生日,经过调查,zb发现C小加和never都很喜欢吃西瓜,而且一吃就是一堆的那种,zb立刻下定决心买了一堆西瓜.当他准备把西瓜送给C小加和never的时候,遇到了一个难题,never和C小加不在一块住,只能把西瓜分成两堆给他们,为了对每个人都公平,他想让两堆的重量之差最小.每个西瓜的重量已知,你能帮

zb的生日(暴搜dfs)

zb的生日 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么庆祝生日,经过调查,zb发现C小加和never都很喜欢吃西瓜,而且一吃就是一堆的那种,zb立刻下定决心买了一堆西瓜.当他准备把西瓜送给C小加和never的时候,遇到了一个难题,never和C小加不在一块住,只能把西瓜分成两堆给他们,为了对每个人都公平,他想让两堆的重量之差最小.每个西瓜的重量已知,你能帮

NY 325 zb的生日

假设所有西瓜重 Asum,所求的是用 Asum / 2 的背包装,最多装下多少. 刚开始用贪心作的,WA.后来用01背包,结果TLE,数据太大.原来用的是深搜! dfs(int sum, int i) 表示当前装已了 sum,对第 i 个进行决策. 用时1200多MS,不知道大牛们60MS是怎么搞的,泥煤,20倍!以后再优化吧. 代码如下: #include<iostream> #include<cstdio> #include<math.h> #include<

Zb的生日

时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么庆祝生日,经过调查,zb发现C小加和never都很喜欢吃西瓜,而且一吃就是一堆的那种,zb立刻下定决心买了一堆西瓜.当他准备把西瓜送给C小加和never的时候,遇到了一个难题,never和C小加不在一块住,只能把西瓜分成两堆给他们,为了对每个人都公平,他想让两堆的重量之差最小.每个西瓜的重量已知,你能帮帮他么? 输

(c++实现)南阳理工 题目325 zb的生日

zb的生日 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么庆祝生日,经过调查,zb发现C小加和never都很喜欢吃西瓜,而且一吃就是一堆的那种,zb立刻下定决心买了一堆西瓜.当他准备把西瓜送给C小加和never的时候,遇到了一个难题,never和C小加不在一块住,只能把西瓜分成两堆给他们,为了对每个人都公平,他想让两堆的重量之差最小.每个西瓜的重量已知,你能帮