nyoj 0325 zb的生日

zb的生日

时间限制:3000 ms  |  内存限制:65535 KB
难度:2
描述
今天是阴历七月初五,acm队员zb的生日。zb正在和C小加、never在武汉集训。他想给这两位兄弟买点什么庆祝生日,经过调查,zb发现C小加和never都很喜欢吃西瓜,而且一吃就是一堆的那种,zb立刻下定决心买了一堆西瓜。当他准备把西瓜送给C小加和never的时候,遇到了一个难题,never和C小加不在一块住,只能把西瓜分成两堆给他们,为了对每个人都公平,他想让两堆的重量之差最小。每个西瓜的重量已知,你能帮帮他么?
输入
多组测试数据(<=1500)。数据以EOF结尾
第一行输入西瓜数量N (1 ≤ N ≤ 20)
第二行有N个数,W1, …, Wn (1 ≤ Wi ≤ 10000)分别代表每个西瓜的重量
输出
输出分成两堆后的质量差
样例输入
5
5 8 13 27 14
样例输出
3
解法1:动态规划
  把所有西瓜重量加起来除以二,用01背包求解最接近一半重量的值,这个值就是其中一堆的重量,因为重量非常大,所以花费时间很多
代码:
 #include <stdio.h>
#include <string.h>
#define max(a,b) a>b?a:b
using namespace std;
const int N = ;
int v[];
int dp[N];
int main() {
int n;
while(scanf("%d", &n) != EOF) {
memset(dp, , sizeof(dp));
int sum = ;
for(int i = ; i < n; i++) {
scanf("%d", &v[i]);
sum += v[i];
}
int W = sum/;
for(int i = ; i < n; i++) {
for(int j = W; j >= v[i]; j--) {
dp[j] = max(dp[j], dp[j - v[i]] + v[i]);
}
}
printf("%d\n", sum - *dp[W]);
}
return ;
}

解法2:搜索+剪枝

  本题重量很大,所以花费时间很多,但是西瓜数量非常少,所以可以用搜索+剪枝来做

代码:

 #include<bits/stdc++.h>
using namespace std;
int n, maxn;
int w[];
int vs[];
void dfs(int cur, int sum, int W) {
if(cur == ) {
maxn = max(maxn, sum);
return;
}
if(vs[cur] + sum < maxn) return; //剪枝
if(W >= w[cur]) dfs(cur-, sum + w[cur], W - w[cur]);
dfs(cur-, sum, W);
}
int main() {
while(scanf("%d", &n) != EOF) {
maxn = ;
memset(vs, , sizeof(vs));
int sum = ;
for(int i = ; i <= n; i++) {
scanf("%d", &w[i]);
sum += w[i];
vs[i] += vs[i-] + w[i];
}
dfs(n, , sum/);
printf("%d\n", sum - *maxn);
}
return ;
}

nyoj 0325 zb的生日(dp)的更多相关文章

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

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

  2. nyoj 325 zb的生日

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

  3. nyoj 325 zb的生日(dfs)

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

  4. nyoj zb的生日

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

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

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

  6. ACM zb的生日

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

  7. zb的生日

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

  8. nyoj325 zb的生日(DFS)

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

  9. zb的生日(暴搜dfs)

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

随机推荐

  1. Mysql 强行Kill 连接

    BEGIN ; ; ; DO KILL @Temp; ; END WHILE ; END

  2. windows版 Java调用人脸识别离线sdk

    最近因工作需求在java-web服务中调用人脸识别离线sdk,主要通过JNA及JNI技术,但均未调试通过,JNA调用时出现以下异常,一直未解决,求大佬指点,导常信息如下: in BaiduFaceAp ...

  3. 学习笔记43—Linux基础集

    1.通过窗口进入 /usr/local: 请点击computer; 通过窗口进入自己home目录:点击home即可.

  4. 对pandas和pendulum的吐槽——TimeStamp numpy的datetime64的转型问题

    今天被这俩货因为时间日期处理不兼容的问题折腾半天,气死人,不吐槽不行了! 这俩简称都可以是pd的库,都TM够轴的,互相兼容极差. pandas 和 pendulum 知名度都很高,也很常用.但我就是用 ...

  5. 分割窗口QSplitter类

    概述 分割窗口QSplitter类在应用程序中经常用到,它可以灵活分割窗口的布局,经常用在类似文件资源管理器的窗口设计中 在Qt开发中,QSplitter是比较常用到的,也就是分割窗口.并且窗口分割处 ...

  6. 使用Qss设置QT程序界面的样式和皮肤

    1         使用Qss设置QT程序界面的样式和皮肤 1.1  Qss的功能 Qt程序界面中控件的背景图片.大小.字体颜色.字体类型.按钮状态变化等属性可以通过Qss文件来设置,美化UI界面.实 ...

  7. IAR编译器

    1.在Build输出框中单击鼠标右键可以选择查看的信息,包括每个文件代码大小,数据大小,以及整个工程代码与数据大小等. 2.在IDE Options的key bingdings功能下可以查看和设置需要 ...

  8. Shell脚本中的并发(转)

    转自http://blog.csdn.net/wangtaoking1/article/details/9838571 主要记录一下Shell脚本中的命令的并发和串行执行. 默认的情况下,Shell脚 ...

  9. 【洛谷p5015】标题统计

    (写上瘾了再来一篇吧) 标题统计[传送门] 洛谷算法标签 字符串这种东西,我看到是崩溃的.因为我们只学到了二维数组[这个梗自行get],总之我们当时还没有学.然后显然就是各种翻书,各种百度.大致了解了 ...

  10. canal入门Demo

    关于canal具体的原理,以及应用场景,可以参考开发文档:https://github.com/alibaba/canal 下面给出canal的入门Demo (一)部署canal服务器 可以参考官方文 ...