[codility]Min-abs-sum

https://codility.com/demo/take-sample-test/delta2011/

0-1背包问题的应用。我自己一开始没想出来。“首先对数组做处理,负数转换成对应正数,零去掉,计数排序统计有多少个不同元素及其对应个数,并累加所有数的和sum,不妨记b=sum/2,不同元素个数为m,则目标转换为在m个不同元素中挑出若干个元素(每个元素可以重复多次,但少于它们的出现次数),使得它们的和不大于b并尽量接近。到了这里,应该有点熟悉的感觉了吧。对了,其实这就是0-1背包问题!” 参考http://phiphy618.blogspot.jp/2013/05/codility-delta-2011-minabssum.html

第一次的代码并未完全通过,75分,大数据全挂。原因是这里一个元素可以出现多次,是多重背包问题。

// you can also use imports, for example:
// import java.math.*;
class Solution {public int solution(int[] A) {// write your code here...if (A.length == 0) return 0;int sum = 0;int max = 0;for (int i = 0; i < A.length; i++) {if (A[i] < 0) A[i] = -A[i];sum += A[i];}int target = sum / 2;int dp[][] = new int[A.length][target];for (int i = 0; i < A.length; i++) {for (int j = 0; j < target; j++) {// j+1 is the weight limitif (i == 0){if (A[i] <= (j+1)) {dp[i][j] = A[i];}else{dp[i][j] = 0;}}else // i != 0{int w1 = dp[i-1][j];int w2 = 0;if (j-A[i] >=0 ) {w2 = dp[i][j-A[i]] + A[i];}dp[i][j] = w1 > w2 ? w1 : w2;}}}max = dp[A.length - 1][target - 1];return (sum - max * 2);}
}

第二次参考了cp博士的文章,处理了多重背包的优化,并用了滚动数组:http://blog.csdn.net/caopengcs/article/details/10028269

// you can also use includes, for example:
// #include <algorithm>
int solution(const vector<int> &A) {// write your code in C++98int len = A.size();int sum = 0;int M = 0;for (int i = 0; i < len; i++) {int x = 0;x = A[i] > 0 ? A[i] : -A[i];sum += x;if (x > M)M = x;}vector<int> count;count.resize(M+1);for (int i = 0; i < len; i++) {int x = 0;x = A[i] > 0 ? A[i] : - A[i];count[x]++;}int target = sum / 2;int largest = 0;vector<int> dp(target+1, -1);for (int i = 0; i <= M; i++) {if (count[i] > 0) {for (int j = 0; j <= target; j++) {if (j == 0) dp[j] = count[i];if (dp[j] >= 0) {dp[j] = count[i];if (j > largest)largest = j;}else if (j - i >= 0 && dp[j - i] > 0) {dp[j] = dp[j - i] - 1;if (j > largest)largest = j;}else {dp[j] = -1;}}}}return abs(sum - 2 * largest);
}

  

  

转载于:https://www.cnblogs.com/lautsie/p/3228644.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421586.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql kettle_带你躲过mysql与kettle闹离婚的坑,开发不迷茫

其实呢kettle配mysql还是蛮不错的&#xff0c;首先人家门当户对&#xff0c;都是开源的哈&#xff0c;其次&#xff0c;kettle也是比较听话的&#xff0c;什么事都以mysql为主&#xff0c;mysql不满意&#xff0c;他就立马报错。那下面就是mysql与kettle闹脾气要离婚的例子啦&a…

poj 1161 最短路构图

题目链接&#xff1a;http://poj.org/problem?id1161 #include <cstdio> #include <cmath> #include <algorithm> #include <iostream> #include <cstring> #include <queue> #include <vector>#define maxn 400 #define INF 0x3f…

struct里面有union_联合体union无可替代的使用

在C语言中关键字union和struct用法是一样的&#xff0c;而且在项目中struct随处可见。在我的专栏"嵌入式入门——C语言入门到深入"中我详细的讲解了它们的异同。很多人编码了多年也许会认为有struct就够了&#xff0c;要union干嘛&#xff0c;感觉union的存在有些鸡肋…

[转]字符串匹配那些事

本系列文章主要介绍几种常用的字符串比较算法&#xff0c;包括但不限于蛮力匹配算法&#xff0c;KMP算法&#xff0c;BM算法&#xff0c;Horspool算法&#xff0c;Sunday算法&#xff0c;fastsearch算法&#xff0c;KR算法等等。 本文主要介绍KMP算法和BM算法&#xff0c;它们分…

查看kafka的主从状态_Mysql 主从复制,mysql-proxy读写分离

准备两台mysql服务器&#xff0c;master&#xff08;192.168.43.64&#xff09;、slave&#xff08;192.168.84.129&#xff09;master配置&#xff1a;log-binmysql-bin binlog_formatmixed server_id1 binlog_checksumnoneslave配置:然后给master授权并查看二进制文件名称和位…

UnixLinux技术文章目录(2015-12-22更新)

Unix & Linux 方面的博客整理、归纳分类&#xff0c;要坚持不懈的学习Unix &Linux&#xff0c;加油&#xff01;技术需要累积和沉淀.更需要锲而不舍的精神、持之以恒的毅力&#xff01;借此下面名句勉励自己&#xff01; 书上有路勤为径&#xff0c;学海无涯苦作舟&…

c mysql 创建存储过程_[转]MYSQL 创建存储过程

MySQL 存储过程是从 MySQL 5.0 开始增加的新功能。存储过程的优点有一箩筐。不过最主要的还是执行效率和SQL 代码封装。特别是 SQL 代码封装功能&#xff0c;如果没有存储过程&#xff0c;在外部程序访问数据库时(例如 PHP)&#xff0c;要组织很多 SQL 语句。特别是业务逻辑复杂…

14个支持响应式设计的流行前端开发框架

在几年前&#xff0c;并没有真正意义上的前端开发。随着网络技术的发展&#xff0c;网站和 Web 应用程序变得越来越复杂&#xff0c;前端部分的工作独立出来逐渐成为现在的前端开发。如今&#xff0c;我们可以看到越来越多的公司在招聘前端开发岗位。 前端开发并不容易&#xf…

marquee 移动属性

该标签不是HTML3.2的一部分&#xff0c;并且只支持MSIE3以后内核&#xff0c;所以如果你使用非IE内核浏览器(如&#xff1a;Netscape)可能无法看到下面一些很有意思的效果该标签是个容器标签语法&#xff1a;<marquee></marquee>以下是一个最简单的例子&#xff1a…

重写方法返回值可以不一样吗_MAX和MIN函数你会用吗?不一样的应用方法

​一看到标题&#xff0c;大家可能会想&#xff0c;MAX和MIN函数谁不会&#xff0c;不就是求最大和最小嘛&#xff0c;今天就给大家介绍点MAX和MIN函数不一样的内容。首先还是先看下它的定义&#xff1a;MAX&#xff1a;返回一组值中的最大值MIN&#xff1a;返回一组值中的最小…

(转载)最黑的黑客米特尼克:多次耍FBI 终被高手擒

&#xff08;转载&#xff09;http://bbs.chinabyte.com/thread-816847-1-1.html凯文米特尼克 50岁 第一个被FBI通缉的黑客,被称为“头号电脑骇客”&#xff0c;曾入侵北美防空指挥系统&#xff0c;现职业是网络安全咨询师。 阿德里安拉莫 入侵《纽约时报》、微软&#xff0c;被…

mysql数据库重启命令_MySQL数据库之windows下重启mysql的方法

本文主要向大家介绍了MySQL数据库之windows下重启mysql的方法 &#xff0c;通过具体的内容向大家展现&#xff0c;希望对大家学习MySQL数据库有所帮助。其中第二种方法对我这无效&#xff0c;以后再搞清楚&#xff01;一、MYSQL服务我的电脑——(右键)管理——服务与应用程序—…

例子:Basic Lens sample

本例演示了如何自己扩展一个Camera Lens。 1. UI界面是一个MediaViewer <controls:MediaViewerx:Name"MediaViewer"Items"{Binding CameraRoll}" FooterVisibility"Visible"FooterDisplayed"MediaViewer_FooterDisplayed"ItemDispl…

mysql中的生日应该是什么类型_MySQL中的数据类型和schema优化

最近在学习MySQL优化方面的知识。本文就数据类型和schema方面的优化进行介绍。1. 选择优化的数据类型MySQL支持的数据类型有很多&#xff0c;而如何选择出正确的数据类型&#xff0c;对于性能是至关重要的。以下几个原则能够帮助确定数据类型&#xff1a;更小的通常更好应尽可能…

不是每个人都可以坚持!

三个月的暑假&#xff0c;准确来说休息了1个月。 从7月25日开始&#xff0c;就开始了人生第一份工作&#xff0c;或者说是实习。单位是上海XXX&#xff0c;一家国企。 刚进单位的时候&#xff0c;老大给我的任务&#xff0c;是很简单的三个字做报表。本来以为很简单&#xff0c…

vsftpd pam_mysql crypt 1_安装vsftpd+pam+mysql实现对虚拟用户身份认证详细步骤

安装vsftpdpammysql实现对虚拟用户身份认证详细步骤发布时间&#xff1a;2020-05-13 11:42:57来源&#xff1a;亿速云阅读&#xff1a;188作者&#xff1a;三月栏目&#xff1a;数据库下文主要给大家带来安装vsftpdpammysql实现对虚拟用户身份认证详细步骤&#xff0c;希望这些…

ios 在UIView上画图,线条

1.画线条&#xff08;实线&#xff0c;虚线&#xff09; - (void)drawRect:(CGRect)rect { CGContextRef context UIGraphicsGetCurrentContext(); [self drawXLine:context rect:rect]; [self drawLegend:context rect:rect]; } -(CGContextRef)drawXLine:(CGContextRef)cont…

校园卡系统mysql与java结合_基于Java+JSP+Mysq+Servletl的校园卡一卡通管理系统

需求分析使用JavaJSPMysqServlet技术实现一个校园卡一卡通管理系统, 分为学生与管理员两个角色, 能够进行登录, 充值, 挂失, 历史消费查询等功能本站提供其他类型的 一卡通管理系统源代码 点击查看运行环境java, jdk1.8,tomcat8.5,mysql5.6, EclispseEE/Idea项目技术java, JSP,…

linux/unix下setuid/seteuid/setreuid/setresuid

其中setresuid()具有最清晰的语法&#xff1a; setresuid()被执行的条件有&#xff1a; ①当前进程的euid是root ②三个参数&#xff0c;每一个等于原来某个id中的一个 如果满足以上条件的任意一个&#xff0c;setresuid()都可以正常调用&#xff0c;并执行&#xff0c;将 进程…