物品分堆

Time Limit: 2000/1000ms (Java/Others)

Problem Description:

有n个物品,物品i的重量为Wi,现在想要把这个n个物品分类两堆,求最小的重量差(物品不可分割)。

Input:

输入包含多组测试,每组测试第一行输入一个整数n(1≤n≤100);第二行输入n个整数Wi(1≤ai≤10^4)。

Output:

对于每组测试,输出一个数字,表示分成两堆后的最小质量差。

Sample Input:

5
2 3 5 23 35
5
10 7 8 6 11

Sample Output:

2
0
解题思路:简单的01背包,每个物品只有一件,将所有物品的重量相加sum后取一半sum/2作为背包的容量,那么问题转化成从n件物品中挑选出若干件物品,使得其总重量不超过sum/2时有最大价值(最大重量),即典型的01背包,因为sum-dp[sum/2]>=dp[sum/2],所以最后两堆物品之差为sum-2*dp[sum/2]。
AC代码:
 #include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int n,sum,wi[],dp[];//数组长度开10^6+5
int main(){
while(~scanf("%d",&n)){
sum=;
memset(dp,,sizeof(dp));
for(int i=;i<n;++i){
scanf("%d",&wi[i]);
sum+=wi[i];
}
for(int i=;i<n;++i)
for(int j=sum/;j>=wi[i];--j)//01背包
dp[j]=max(dp[j],dp[j-wi[i]]+wi[i]);
printf("%d\n",sum-*dp[sum/]);//两堆物品重量之差
}
return ;
}

最新文章

  1. 现场打印智能无线PDA安卓POS 条码识别、打印、数据采集销售开单收银管理软件
  2. The Similarities and Differences Between C# and Java -- Part 1(译)
  3. 20145204&amp;20145212信息安全系统实验三报告
  4. thinkphp3.2与phpexcel基础生成
  5. XFire最佳实践
  6. 内省(Introspector)
  7. BZOJ 2132 圈地计划(最小割)
  8. PHP之路,Day1 - PHP基础
  9. How to Read, Write XLSX File in Java - Apach POI Example---reference
  10. css中的伪类
  11. vs2013 MVC 无法确定要使用哪一版本的 ASP.NET Web Pages错误
  12. TortoiseSVN (一) - 疑难操作
  13. adp设备是什么
  14. 解决IE增强配置的问题
  15. IO事件驱动模型
  16. Hive记录-使用Hue管理Hive元数据
  17. python加快数据处理的方法
  18. IBM flex system P260
  19. AngularJS 中{{}}与ng-bind指令
  20. windows dos命令大全

热门文章

  1. [ C语言版 ] 数独计算器 [ 搜索剪枝法 ]
  2. 【BZOJ4583】购物(组合计数)
  3. 2.3 comparator(比较器)
  4. hdu - 1113 Word Amalgamation (stl)
  5. [bzoj3306]树_dfs序_线段树_倍增lca
  6. [TypeScript] Define Custom Type Guard Functions in TypeScript
  7. [Web Analytics] Into to Web Analytics
  8. 从头认识Spring-2.3 注解装配-@autowired(4)-required(2)
  9. CSS 全部的列表样式类型
  10. VirtualMachineManager