题目描述:

有两个序列a,b,大小都为n,序列元素的值任意整数,无序;
要求:通过交换a,b 中的元素,使[序列a 元素的和]与[序列b 元素的和]之间的差最小。
例如:
var a=[100,99,98,1,2, 3];
var b=[1, 2, 3, 4,5,40];

分析:

很多情况下,贪心算法得到的解并不是最优解,但是这道题貌似是最优解

思想:每次从AB中找到两个使得和之差最小的元素交换

当前和之差diff=sumA-sumB,从A中找到一元素a,从B中找到一元素b,如果交换那么就须有(sumA-a+b)-(sumB-b+a)=sumA-sumB-2(a-b)=diff-2(a-b),

也就是使得abs(diff-2(a-b))最小的值交换

#include "iostream"
#include <fstream>
#include <algorithm>
#include <functional>
using namespace std; #define N 6
int A[N]={,,,,,};
int B[N]={,,,,,};
void Swap()
{
int sumA=,sumB=;
for (int i=;i<N;i++)
{
sumA+=A[i];
sumB+=B[i];
} int diff=sumA-sumB;
while (diff!=)
{
int mini=,minj=;
int best=;
for(int i=;i<N;i++)
for (int j=;j<N;j++)
{
if (abs(diff-*(A[i]-B[j]))<abs(diff-*best))
{
best=A[i]-B[i];
mini=i;
minj=j;
}
} if (best==) //已经无法再找到可以交换的一组
return;
swap(A[mini],B[minj]); sumA-=best;
sumB+=best;
diff=sumA-sumB;
}
}
int main(){
freopen("C:\\in.txt","r",stdin);
Swap();
for(int i=;i<N;i++)cout<<A[i]<<" ";
cout<<endl;
for(int i=;i<N;i++)cout<<B[i]<<" ";
cout<<endl;
return ;
}

http://shenxingfeng1988.blog.163.com/blog/static/106376005201371171345712/

http://blog.sina.com.cn/s/blog_60c8379d01014du8.html

通过交换a,b 中的元素,使[序列a 元素的和]与[序列b 元素的和]之间的差最小的更多相关文章

  1. 有两个数组a,b,大小都为n,;通过交换a,b中的元素,使sum(a)-sum(b)最小。

    有两个数组a,b,大小都为n,数组元素的值任意整形数,无序: 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小. 当前数组a和数组b的和之差为    A = sum(a) - ...

  2. 如何交换两个等长整形数组使其数组和的差最小(C和java实现)

    1. 问题描述: 有两个数组a,b,大小都为n,数组元素的值任意整形数,无序: 要求:通过交换a,b中的元素,使[数组a元素的和]与[数组b元素的和]之间的差最小. 2. 求解思路: 当前数组a和数组 ...

  3. HTML中为何p标签内不可包含div标签?那哪些块元素里面不能放哪些块元素呢?

    先看下面的例子你就能明白两者的差别: <p>测试一下块元素与<span>内联元素</span>的差别</p> <p>测试一下<div& ...

  4. IT公司100题-32-交换元素,使数组差最小

    问题描述: 有两个整数序列a, b,大小都为n, 序列元素的值任意整数,无序. 要求:通过交换a, b 中的元素,使得sum(a)-sum(b),差最小. 例如: var a=[80, 40, 60, ...

  5. 在 ServiceModel 客户端配置部分中,找不到引用协定“WebServiceTest.WebServiceSoap”的默认终结点元素。这可能是因为未找到应用程序的配置文件,或者是因为客户端元素

    原文  http://blog.csdn.net/bugdemo/article/details/9083497 主题 技术 在引用WebService后,程序运行到实例化WebService时报错, ...

  6. Eclipse和Android Studio中的DDMS使用时什么不同?

    http://www.jb51.net/softjc/454131.html Eclipse和Android Studio中的DDMS使用时什么不同? 相信很多经常开发Android应用的朋友应该都接 ...

  7. 在 ServiceModel 客户端配置部分中,找不到引用协定“PmWs.PmWebServiceSoap”的默认终结点元素

    System.Exception: ConfigManager.LoadConfigurationFromDb ServiceFactory.GetPmWebService 在 ServiceMode ...

  8. 在 ServiceModel 客户端配置部分中,找不到引用协定“IpsBarcode.ScanService”的默认终结点元素。这可能是因为未找到应用程序的配置文件,或者是因为客户端元素中找不到与此协定匹配的终结点元素。

    一个类库引用了web service A,用另一个EXE做承载时,访问这个web service A时就提示:“在 ServiceModel 客户端配置部分中,找不到引用协定“IpsBarcode.S ...

  9. jquery中的append功能相当于剪切的作用 将原来的元素剪切走

    jquery中的append功能相当于剪切的作用 将原来的元素剪切走

随机推荐

  1. 第二百七十一节,Tornado框架-CSRF防止跨站post请求伪造

    Tornado框架-CSRF防止跨站post请求伪造 CSRF是什么 CSRF是用来在post请求时做请求验证的,防止跨站post请求伪造 当用户访问一个表单页面时,会自动在表单添加一个隐藏的inpu ...

  2. 股票指数kdj,sar,macd

    http://blog.eastmoney.com/gulingqianketong2011/blog_120832611.html http://blog.sina.com.cn/s/blog_a3 ...

  3. Your Progress As A Programmer Is All Up To You

    Feb 3, 2014 I read a comment on a post on Hacker News where a young programmer said they didn't want ...

  4. jQuery秒表、闹钟、计时器和报警插件

    jQuery秒表.闹钟.计时器和报警插件 http://www.sucaihuo.com/jquery/8/896/demo/

  5. 隐马尔可夫树(HMT模型)

    HMT(Hidden Markov Tree)隐马尔可夫树 [论文] 小波变换与HMT模型的图像插值算法-郭昌-中山大学学报(自然科学版)

  6. 小谈js原型链和继承

    原型(prototype)在js中可是担当着举足轻重的作用,原型的实现则是在原型链的基础上,理解原型链的原理后,对原型的使用会更加自如,也能体会到js语言的魅力. 本文章会涉及的内容 原型及原型对象 ...

  7. jquery后加Dom绑定事件

    $('#musicCategoryListContainer').on('click', '.musicCategoryItem', function () { $(this).siblings(). ...

  8. XDocument简单入门

    [+]   1.什么是XML? 2.XDocument和XmlDocument的区别? 3.XDocument 4.XmlDocument 5.LINQ to XML 6.XML序列化与反序列化 因为 ...

  9. 网络代理-Firefox在shadow socks下面的使用

    好久不写了,嘿嘿,中午好哈大家,给大家介绍下firefox下配置shadowsocks使用代理. 第一步:先下载一个firefox. 第二步: 打开设置 找到组件选项. 3.第三步: 4.第四步: 5 ...

  10. Python--Get and Post

    #python3 get and post 简单封装 from urllib import request, parse import json def RequestMethod(methodR, ...