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

方法一:

对每一个点求其到其他点的加权距离,然后比较最小。由于有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. 查看SDCard是否被挂载

    获取Environment.getExternalStorageState(),然后得到的字符串进行查看 //android.os.Environment.MEDIA_MOUNTED="mo ...

  2. STM32F0xx_TIM基本延时配置详细过程

    前言 关于定时器大家都应该不会陌生,因为处理器都有这个功能.今天总结的F0系列芯片的定时器根据芯片型号不同,数量也不同.定时器分类:基本定时器.通用定时器和高级定时器.计数位数也有不同,有16位的,有 ...

  3. 第九章 管理类型(In .net4.5) 之 继承机制

    1. 概述 本章包括 设计和实现接口.创建和使用基类 以及 使用.net类库提供的标准接口. 2. 主要内容 2.1 设计和实现接口 一个接口包含公共的方法.属性.事件.索引器.类和结构都可以实现接口 ...

  4. sqlserver中查找长时间未提交事务

    无论是有意无意,如果事务在数据库中保持打开,则它会阻塞其他进程对修改后的数据进行操作.同样,对事务日志进行备份也只会截断不活动事务的那部分事务日志,所以打开的事务会导致日志变多(甚至达到物理限制),直 ...

  5. How to create QTP Shared Object Repository

    How to create QTP Shared Object Repository To create a shared object repository by performing follow ...

  6. layer 弹出子页面然后给父页面赋值

    //----赋值 并关闭当前页面 开始---- FunctionActionDeleteXZ = function (CompanyId, RelCompanyName) { parent.$(&qu ...

  7. Chr()和chrb()的含义(转)

    http://blog.csdn.net/cunxiyuan108/article/details/5989701 Chr(charcode) 必要的 charcode 参数是一个用来识别某字符的 L ...

  8. hadoop HA 之 QJM

    前言 本文主要通过对hadoop2.2.0集群配置的过程加以梳理,所有的步骤都是通过自己实际测试.文档的结构也是根据自己的实际情况而定,同时也会加入自己在实际过程遇到的问题.搭建环境过程不重要,重要点 ...

  9. 字符串流sstream[part3/使用字符串流进行安全的类型转换]

    参考: http://blog.163.com/zhuandi_h/blog/static/180270288201291710222975/ http://www.cnblogs.com/games ...

  10. Asp.Net MVC3(三)-MvcApp实现全局异常捕获

    定义异常捕获类: [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMu ...