LINTCODE————最小划分
来源:互联网 发布:sql server 2008 sa 编辑:程序博客网 时间:2024/06/05 05:23
LINTCODE————最小划分
思路:利用背包问题的思路,对数组求和,计为sum,则我们只需要知道dp[sum/2]的分配是否存在就好可,如果不存在,那么我们取dp[sum/2-1]….一直到存在为止,dp[sum/2-i]存在的时候,也就是说明一边分配sum/2-i,一边 分配sum-sum/2+i为要求的最小分配,然后就差值就OK了
class Solution {public: /* * @param : the given array * @return: the minimum difference between their sums */ int findMin(vector<int> &nums) { // write your code here if(nums.size() <= 0) return 0; int sum = 0; sum = accumulate(nums.begin(),nums.end(),0); int sumt = sum; sum = sum/2; vector<int> dp(sumt+1, 0); dp[0] = 1; // 背包问题思路,求解总和为j的分配是否存在 for(int i = 0; i < nums.size(); i++) for(int j = sum; j >= nums[i];j--) dp[j] += dp[j-nums[i]]; //从后往前遍历,存在总和最大的j时,即是最小的划分 for(int i = sum; i>=0; i--) { if(dp[i] != 0) return abs(i*2-sumt); } }};
阅读全文
0 0
- LINTCODE————最小划分
- 数组划分——LintCode
- lintcode——链表划分
- 最小子数组—LintCode
- 最小划分-LintCode
- lintcode刷题——最小差
- lintcode&九章算法——Lintcode No.96. 链表划分 ? 待解决
- lintcode——二叉树的最小深度
- lintcode——子树
- Lintcode——中位数
- Lintcode—跳跃游戏
- 最大间距—LintCode
- 快速幂—LintCode
- lintCode(177)——把排序数组转换为高度最小的二叉搜索树
- lintcode——把排序数组转换为高度最小的二叉搜索树
- lintcode刷题——和大于S的最小子数组
- 递归—集合划分
- lintcode&九章算术——Lintcode No.80 中位数 ? 待解决
- 通过ContentObserver监听数据库某表的增加、删除、更新动作,实现listView异步单项Item的刷新
- Java面试之路(一)Java基础部分
- Maven编译打包过程(clean install)中遇到相关jdk版本导致的问题
- 杭电oj1865
- 透明度测试与透明度混合详解《unity shader入门精要》学习笔记
- LINTCODE————最小划分
- 程序员 30 岁前,该如何规划自己的职业发展?
- 淡入淡出js 原生实现以及css 实现方法
- 最不可思议的巧合,这些电影一定是穿越者拍的了!
- 腾讯换logo了!还出了套“腾讯字体”:6763个汉字 !
- 简单的计算100000以内的质数(JAVA实现)
- 机器学习算法总结
- 三种方式打印杨辉三角形(JAVA实现)
- 用编写一个简单的记事本(C#实现)