NYOJ456-邮票分你一半

简介:

邮票分你一半
时间限制:1000 ms    内存限制:65535 KB
难度:3
描述
     小珂最近收集了些邮票,他想把其中的一些给他的好朋友小明。每张邮票上都有分值,他们想把这些邮票分成两份,并且使这两份邮票的

分值和相差最小(就是小珂得到的邮票分值和与小明的差值最小),现在每张邮票的分值已经知道了,他们已经分好了,你知道最后他们得到

的邮票分值和相差多少吗?
输入
第一行只有一个整数m(m=1000),表示测试数据组数。
接下来有一个整数n(n=1000),表示邮票的张数。
然后有n个整数Vi(Vi=100),表示第i张邮票的分值。
输出
输出差值,每组输出占一行。


样例输入
2
5
2 6 5 8 9
3
2 1 5

样例输出
0
2

 

 

和昨天问题一样,只不过这次数据变大了,不能用DFS糊弄了,老老实实用动态规划

//背包问题变形,把这些数放在一个数总和的一半大的一个背包中,使其尽量装的最多。则是两半差值最小
#include<stdio.h>
#include<string.h>
int abs(int n)
{
   if(n<0)
   return -1*n;
   else
   return n;
}
int max(int n,int m)
{return n>m?n:m;}
int a[1010],dp[100010];
int main()
{
    int i,j,n,m,sum;
    scanf("%d",&n);
    while(n--)
    {
       scanf("%d",&m);
       sum=0;
       memset(dp,0,sizeof(dp));
       for(i=0;i<m;i++)
       {
          scanf("%d",&a[i]);
          sum+=a[i];
       }
       for(i=0;i<n;i++)
       for(j=sum/2;j>=a[i];j--)
       {
          dp[j]=max(dp[j],dp[j-a[i]]+a[i]);
       }
       printf("%d\n",abs(sum-dp[sum/2]-dp[sum/2]));
    }
    return 0;
}
相关文章
|
算法 机器人 C语言
【二分查找】分巧克力、机器人跳跃、数的范围
开始准备蓝桥杯啦!这是计划的一部分,每天都会更新一个专题的内容,内容参考自acwing蓝桥杯辅导课,有兴趣的uu们也可以自行观看
108 0
|
5月前
|
搜索推荐 算法 C++
蓝桥杯分糖果、最小化战斗力差距、小蓝零花钱
这是一个关于算法问题的集合,包括三个不同的任务: 1. **分糖果**:肖恩有不同种类的糖果要分给学生,目标是使得到糖果字符串的字典序最大且尽量小。给定糖果种类数和一个初始字符串,输出能达到的最小字典序的最大值。 2. **最小化战斗力差距**:小蓝需要将队员分为两组,每组战斗力差距最小。给定队员数量和战斗力值,找出最小的战斗力差距。 3. **小蓝的零花钱**:小蓝要在序列中分割偶数和奇数,每次分割代价是两端元素差的绝对值。目标是在预算内确定最多能进行多少次这样的分割。 每个问题都提供了输入输出示例和相应的C++代码片段来解决这些问题。
|
6月前
代码随想录Day29 贪心04 LeetCode T860 柠檬水找零 T406 根据身高重建队列 T452 用最少得箭引爆气球
代码随想录Day29 贪心04 LeetCode T860 柠檬水找零 T406 根据身高重建队列 T452 用最少得箭引爆气球
41 0
wustojc2013分糖果
wustojc2013分糖果
42 0
wustojc2013分糖果
|
机器学习/深度学习 人工智能
1320:【例6.2】均分纸牌(Noip2002) 2020-11-30
1320:【例6.2】均分纸牌(Noip2002) 2020-11-30
112 0
|
测试技术
L2-003 月饼 (25 分)(贪心)
L2-003 月饼 (25 分)(贪心)
75 0
(二分)1227. 分巧克力
(二分)1227. 分巧克力
76 0
代码随想录刷题|LeetCode 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球
代码随想录刷题|LeetCode 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球
代码随想录刷题|LeetCode 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球