UVA 562 Dividing coins (01背包)
2016-07-02 14:50
357 查看
//平分硬币问题
//对sum/2进行01背包,sum-2*dp[sum/2]
//对sum/2进行01背包,sum-2*dp[sum/2]
#include <iostream> #include <cstring> #include <algorithm> using namespace std; int value[100000],dp[100000]; int main() { int n,m,sum,sum1; cin>>n; while(n--) { cin>>m; sum=0; for(int i=1;i<=m;i++) { cin>>value[i]; sum+=value[i]; } sum1=sum/2; memset(dp,0,sizeof(dp)); for(int i=1;i<=m;i++) for(int j=sum1;j>=value[i];j--) dp[j]=max(dp[j],dp[j-value[i]]+value[i]); cout<<sum-2*dp[sum1]<<endl; } return 0; }
相关文章推荐
- poj2752(kmp的自身失配函数的利用)
- 轻量级分布式 RPC 框架
- Linux内核---11.关于结构体对齐
- 我从编程总结的 22 个经验
- 计算器 保留有效数字
- Cocos2dx 关闭CCLOG
- 股权投资半年报
- 股权投资半年报
- 股权投资半年报
- tcp的简单介绍
- Android自定义对话框的使用
- 消除Xcode iOS项目的警告
- Design Patterns in Swift:单例模式(上)
- Eclipse 运行MapReduce 错误 以及参考解决方法
- Stream,Reader/Writer,Buffered的区别(2)
- 显示器新一代
- 测试小卒子--python--virtualenv搭建
- RMI原理及实现
- CKMLCP前期未结算_报错
- 优先队列的数组、二叉堆实现