nyoj 邮票分你一半
邮票分你一半
- 描述
- 小珂最近收集了些邮票,他想把其中的一些给他的好朋友小明。每张邮票上都有分值,他们想把这些邮票分成两份,并且使这两份邮票的分值和相差最小(就是小珂得到的邮票分值和与小明的差值最小),现在每张邮票的分值已经知道了,他们已经分好了,你知道最后他们得到的邮票分值和相差多少吗?
- 输入
- 第一行只有一个整数m(m<=1000),表示测试数据组数。
接下来有一个整数n(n<=1000),表示邮票的张数。
然后有n个整数Vi(Vi<=100),表示第i张邮票的分值。 - 输出
- 输出差值,每组输出占一行。
- 样例输入
-
2 5 2 6 5 8 9 3 2 1 5
- 样例输出
-
0 2
深搜:#include <iostream>
using namespace std;int a[1002],mid,m,Max;
//每个邮票都有两种选择,给小明或不给小明
void DFS(int i,int count)
{
if(Max==mid) //若Max的值恰好等于mid,则退出本次搜索,返回上层
return ;
if(i==m)//i==m时表示数组已经遍历完,因为在输入时数组的最大范围是m-1;
{
if(count>Max)//数组遍历完之后判断下这次获取的邮票的分值是否比上次更大(更接近mid),
Max=count;//若是,则更新Max的值
return ;
}
if(a[i]+count<=mid)//如果此时的邮票的总分值+a[i]的值小于一半,则选择这个邮票
DFS(i+1,count+a[i]);
DFS(i+1,count);//此时的分值大于邮票的一半,不选
}int main()
{
int n;
cin>>n;
while(n--)
{
int sum=0;//计算邮票的总分值
Max=0;//计算一个人最多得的有票的分值
cin>>m;
for(int i=0;i<m;i++)
{
cin>>a[i];
sum+=a[i];
}
mid=sum/2;//因为每人最多得到的邮票恰好是总分值的一半,此次差值最小,所以 让每个人得到的不超过总分值的一半
DFS(0,0);
cout<<sum-2*Max<<endl;
}
return 0;
}
动态规划:#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;int a[1005],dp[1005];
int main()
{
int n;
cin>>n;
while(n--)
{
int m,sum=0;
cin>>m;
for(int i=0;i<m;i++)
{
cin>>a[i];
sum+=a[i];
}
memset(dp,0,sizeof(dp));
for(int i=0;i<m;i++)//控制每次访问哪个邮票
{
for(int j=sum/2;j>=a[i];j--)//每个人最多得一半邮票
dp[j]=min(dp[j-a[i]]+a[i],dp[j]);//选或不选,选的话就要减去当前所能接受的最大的邮票的分值
}
cout<<fabs(sum-2*dp[sum/2])<<endl;
}
return 0;
}
nyoj 邮票分你一半的更多相关文章
- nyoj 456 邮票分你一半
邮票分你一半 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 小珂最近收集了些邮票,他想把其中的一些给他的好朋友小明.每张邮票上都有分值,他们想把这些邮票分 ...
- nyoj 456——邮票分你一半——————【背包思想搜索】
邮票分你一半 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 小珂最近收集了些邮票,他想把其中的一些给他的好朋友小明.每张邮票上都有分值,他们想把这些邮票分 ...
- ny325 zb的生日,ny456邮票分你一半
zb的生日 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么庆祝 ...
- NYOJ-456 邮票分你一半 AC 分类: NYOJ 2014-01-02 14:33 152人阅读 评论(0) 收藏
#include<stdio.h> #define max(x,y) x>y?x:y int main(){ int n,x,y; scanf("%d",& ...
- nyoj 94-cigarettes (分清楚,那一部分的cigarettes是用过的,那一部分是没有用过的)
94-cigarettes 内存限制:64MB 时间限制:3000ms 特判: No 通过数:13 提交数:20 难度:2 题目描述: Tom has many cigarettes. We hypo ...
- 多重背包之 HDU -1171Big Event in HDU &HDU -2191悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
这两道题都是多重背包的基础题,前面的安格题意是:给出每个物体的价值和物体的数量,如何分使得A,B所得价值最接近并且A的价值不能小于B,就类似于NYOJ上的那个邮票分你一半那个意思,只不过这里不是一个而 ...
- 【算法】C语言趣味程序设计编程百例精解
C语言趣味程序设计编程百例精解 C/C++语言经典.实用.趣味程序设计编程百例精解(1) https://wenku.baidu.com/view/b9f683c08bd63186bcebbc3c. ...
- javascript类型系统——Number数字类型
× 目录 [1]定义 [2]整数 [3]浮点数[4]科学记数[5]数值精度[6]数值范围[7]特殊数值[8]转成数值[9]实例方法 前面的话 javascript只有一个数字类型,它在内部被表示为64 ...
- opencv3学习:reshape函数
在opencv中,reshape函数比较有意思,它既可以改变矩阵的通道数,又可以对矩阵元素进行序列化,非常有用的一个函数. 函数原型: C++: Mat Mat::reshape() const 参数 ...
随机推荐
- [SDOI2015]星际战争
水题啦 网络流+二分 误差才10^-3,乱搞直接开longlong暴力每个都乘1000,输出时除一下就好了 # include <bits/stdc++.h> # define IL in ...
- [BZOJ1031] [JSOI2007] 字符加密Cipher (后缀数组)
Description 喜欢钻研问题的JS同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法 :把需要加密的信息排成一圈,显然,它们有很多种不同的读法.例如下图,可以读作 ...
- 关系型数据库工作原理-时间复杂度(翻译自Coding-Geek文章)
本文翻译自Coding-Geek文章:< How does a relational database work>. 原文链接:http://coding-geek.com/how-dat ...
- 微信小程序-布局
flex-direction 传送门 border 传送门 边框 粗细:thin(细线).medium(中粗线)和thick(粗线) 类型:九个确定值:none(无边框线). dotted(由点组成的 ...
- WebCracker4.0和monster字典——路由器登陆密码破解工具
路由器登陆密码破解,很伤cpu的
- 设计模式——适配器模式(C++实现)
#include <iostream> #include <string> using namespace std; class STTarget { publ ...
- mysql, sql sever , oracle
一.sqlserver优点:易用性.适合分布式组织的可伸缩性.用于决策支持的数据仓库功能.与许多其他服务器软件紧密关联的集成性.良好的性价比等:为数据管理与分析带来了灵活性,允许单位在快速变化的环境中 ...
- javap -c命令关键字的含义
jdk提供了javap命令用于查看字节码来查看程序执行赋值的顺序,看懂这些关键字可以很好的理解程序执行的过程 转自:http://www.cnblogs.com/duanxz/archive/2014 ...
- ELK学习笔记(五)简单搜索和DSL查询
检索文档 现在我们有一些数据存储在Elasticsearch中,我们可以开始处理这个应用程序的业务需求. 这在Elasticsearch中很容易.我们只需执行HTTP GET请求并指定文档的地址--索 ...
- heartbeat错误排查
错误一: [root@snale2 ha.d ::]#service heartbeat start Starting High-Availability services: INFO: Resour ...