分析:其实就是求矩形中某一个点到其他点的距离加权最小

方法一:

对每一个点求其到其他点的加权距离,然后比较最小。由于有M*N个点,对每一个点求加权距离是O(M*N)的,所以整体时间复杂度是O(M*M*N*N)的。

方法二:

首先做预处理,计算每一行有多少个点,每一列有多少个点,然后计算把其他行的点挪到我这一行需要的加权距离,把其他列的点挪到我这一列的加权距离,

然后对每一个点,计算挪到其所在行的代价+所在列的代价和,求出最小。时间复杂度O(M*N)。

code见下面,calcMIN是方法一,calcDiego是方法二。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; #define MAX_SIZE 500 int arr[MAX_SIZE][MAX_SIZE];
int sumOfRow[MAX_SIZE];
int sumOfCol[MAX_SIZE];
int costOfRow[MAX_SIZE];
int costOfCol[MAX_SIZE]; int rtnRow;
int rtnCol; int calcCost(int row, int col, int x, int y)
{
int cost = ;
for(int i = ; i < row; i++)
{
for(int j = ; j < col; j++)
{
if(arr[i][j] != )
{
cost += (abs(x-i) + abs(y-j)) * arr[i][j];
}
}
}
return cost;
} void calcMin(int row, int col)
{
long long minCost = LLONG_MAX;
long long tmpCost = ;
for(int i = ; i < row; i++)
{
for(int j = ; j < col; j++)
{
tmpCost = calcCost(row, col, i, j);
if(tmpCost < minCost)
{
minCost = tmpCost;
rtnRow = i;
rtnCol = j;
}
}
}
} void calcDiego(int row, int col)
{
for(int i = ; i < row; i ++)
{
sumOfRow[i] = ;
costOfRow[MAX_SIZE] = ;
} for(int j = ; j < col; j++)
{
sumOfCol[j] = ;
costOfCol[MAX_SIZE] = ;
} for(int i = ; i < row; i ++)
{
for(int j = ; j < col; j++)
{
sumOfRow[i] += arr[i][j];
sumOfCol[j] += arr[i][j];
}
} for(int i = ; i < row; i ++)//cost for moving row j to row i
{
for(int j = ; j < row; j ++)
{
if(i == j || sumOfRow[j] == )
continue;
costOfRow[i] += (abs(j-i)) * sumOfRow[j];
}
} for(int i = ; i < col; i ++)//cost for moving col j to col i
{
for(int j = ; j < col; j ++)
{
if(i == j || sumOfCol[j] == )
continue;
costOfCol[i] += (abs(j-i)) * sumOfCol[j];
}
} int cost = INT_MAX;
for(int i = ; i < row; i ++)
{
for(int j = ; j < col; j ++)
{
if(costOfRow[i] + costOfCol[j] < cost)
{
cost = (costOfRow[i] + costOfCol[j] );
rtnRow = i;
rtnCol = j;
}
}
} } int main()
{
int i, j;
int row, col;
cout << "INT_MAX\t" << INT_MAX << endl;
cout << (500ULL**) << endl;
while (scanf("%d%d", &row, &col) == ) {
for (i = ; i < row; i++)
{
for (j = ; j < col; j++)
{
scanf("%d", &arr[i][j]);
}
}
//printf("calc\n " );
calcMin(row, col);
printf("%d %d\n", rtnRow, rtnCol);
calcDiego(row, col);
printf("%d %d\n", rtnRow, rtnCol); } return ;
}

亚马逊 在线测试题目 amazon的更多相关文章

  1. 亚马逊 在线测试题目 amazon (变种的)三叉树的最近公共祖先问题

    题目意思就是找一棵按上面链接所示的树对应的上面的两个点的最小公共祖先(LCP,Least Common Father),按照比较大小来依次返回自己的父亲节点就行了.具体看代码:getfather(a) ...

  2. 亚马逊记AWS(Amazon Web Services)自由EC2应用

    很长时间,我听到AWS能够应用,但是需要结合信用卡,最近申请了. 说是免费的,我还是扣6.28,后来我上网查了.认为是通过进行验证.像服务期满将返回. 关键是不要让我进入全抵扣信用卡支付passwor ...

  3. 最新亚马逊 Coupons 功能设置教程完整攻略!

    最新亚马逊 Coupons 功能设置教程完整攻略! http://m.cifnews.com/app/postsinfo/18479 亚马逊总是有新的创意,新的功能.最近讨论很火的,就是这个 Coup ...

  4. [转]Amazon AWS亚马逊云服务免费一年VPS主机成功申请和使用方法

    今天部落将再次为大家介绍如何成功申请到来自亚马逊的Amazon AWS免费一年的VPS主机服务.亚马逊公司这个就不用介绍了,是美国最大的一家网络电子商务公司,亚马逊弹性计算云Amazon EC2更是鼎 ...

  5. 在亚马逊amazon的AWS上安装Node和MongoDB服务器

    在亚马逊amazon的AWS上安装Node和MongoDB服务器 在建立AWS上账号.创建EC2 ,用putty链接上之后,就可以用下面的方法开始安装. !!! 如果不是是自己建立的EC2, 而是由B ...

  6. 亚马逊云服务器VPS Amazon EC2 免费VPS主机配置CentOS及其它内容

    Amazon目前提供为期一年的免费VPS服务,可到地址http://aws.amazon.com 进行申请. 现在对账号申请成功后,对VPS主机配置CentOS的过程做个图文介绍 1.创建实例(Ins ...

  7. 通过SecureCRT访问亚马逊Amazon EC2主机

    亚马逊推出了免费的云主机服务器 Amazon EC2,它是通过安全密钥来访问主机的. 问题是下载的密钥在SecureCRT 上无法直接使用,需要转换. 下面的方法可以在自己的linux主机上生成sec ...

  8. http://aws.amazon.com/cn/ses/ 亚马逊 营销性非事务邮件发送平台

    http://aws.amazon.com/cn/ses/   亚马逊 营销性非事务邮件发送平台

  9. Android支付接入(八):Amazon亚马逊支付

    下面跟大家一起走一遍Amazon亚马逊的支付,亚马逊目前刚把业务拓展到大陆市场,但这并不代表Amazon支付不成熟,恰恰相反,Amazon的支付流程,支付结果获取及测试另人称赞,支付流程.测试流程简洁 ...

随机推荐

  1. C#连接mysql实例

    using System; using System.Configuration; using MySql.Data.MySqlClient; /// <summary> /// Test ...

  2. ListView与.FindControl()方法的简单练习 #2 -- ItemUpdting事件中抓取「修改后」的值

    原文出處  http://www.dotblogs.com.tw/mis2000lab/archive/2013/06/24/listview_itemupdating_findcontrol_201 ...

  3. Python初学者笔记(4)-简单的通讯录

    要求: 编写一个简单的通讯录 1.通讯录包含至少包含姓名.电话号码.电子邮箱:2.通讯录的信息能够保存在本地磁盘:3.通讯录查找特定人员的信息:4.通讯录能够修改特定人员的信息:5.通讯录能够删除特定 ...

  4. openstack做镜像

    virt-install --virt-type kvm --name windows2008 --ram 1024 --cdrom /opt/windows-2008-x86_64.iso --di ...

  5. pyenv

    export PYTHON_BUILD_MIRROR_URL="http://pyenv.qiniudn.com/pythons/"

  6. 【C#】使用C#将类序列化为XML

    直接上代码: public static class XmlSerializer { public static void SaveToXml(string filePath, object sour ...

  7. mysql Unknown table engine 'InnoDB'解决办法

    最近做项目时,由于数据库存的中文乱码.改了一下配置.中文乱码改过来了,但是在导入数据时Unknown table engine 'InnoDB'  百度上各种拷贝.最后看了下InnoDB.是一种支持事 ...

  8. Kettle行列转换

    Kettle在控件中拥有行列转换功能,但是行列转换貌似是弄反了. 一.行转列 1.数据库脚本 create TABLE StudentInfo ( studentno int, subject ), ...

  9. 深度神经网络DNN的多GPU数据并行框架 及其在语音识别的应用

    深度神经网络(Deep Neural Networks, 简称DNN)是近年来机器学习领域中的研究热点,产生了广泛的应用.DNN具有深层结构.数千万参数需要学习,导致训练非常耗时.GPU有强大的计算能 ...

  10. Android:简单实现ViewPager+TabHost+TabWidget实现导航栏导航和滑动切换

    viewPager是v4包里的一个组件,可以实现滑动显示多个界面. android也为viewPager提供了一个adapter,此adapter最少要重写4个方法: public int getCo ...