列表

详情


NC202492. 仓库选址

描述

牛能在某小城有了固定的需求,为了节省送货的费用,他决定在小城里建一个仓库,但是他不知道选在哪里,可以使得花费最小。
给出一个的矩阵,代表下一年小城里各个位置对货物的需求次数。我们定义花费为货车载货运输的距离,货车只能沿着水平或竖直方向行驶。

输入描述

首先在一行中输入,代表测试数据的组数。
每组输入在第一行给出两个正整数,分别代表矩阵的宽和高。
接下来m行,每行n个不超过1000的数字,代表矩阵里的元素。

输出描述

每组输入在一行中输出答案。

示例1

输入:

3
2 2
1 1
1 0
4 4
0 8 2 0
1 4 5 0
0 1 0 1
3 9 2 0
6 7
0 0 0 0 0 0
0 1 0 3 0 1
2 9 1 2 1 2
8 7 1 3 4 3
1 0 2 2 7 7
0 1 0 0 1 0
0 0 0 0 0 0

输出:

2
55
162

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C(clang11) 解法, 执行用时: 970ms, 内存消耗: 368K, 提交时间: 2021-02-03 14:58:55

#include<stdio.h>
#include<math.h>
int main()
{
	int n,m;
	long long sum,min;
	int a[101][101];
	int t,i,j,k,x,y;
	scanf("%d",&t);
	while(t--)
	{   
		scanf("%d%d",&n,&m);
		min=9e18;
		for(i=1;i<=m;i++)
		{
			for(j=1;j<=n;j++)
			scanf("%d",&a[i][j]);
		}
		for(x=1;x<=m;x++)
		{
			for(y=1;y<=n;y++)
			{   sum=0;
				for(i=1;i<=m;i++)
				{
					for(j=1;j<=n;j++)
					{
						sum+=(abs(x-i)+abs(y-j))*a[i][j];
					}
				}
				
				if(sum<min) min=sum;
			}
		}
		printf("%lld\n",min);
	}
}

C++(clang++ 11.0.1) 解法, 执行用时: 683ms, 内存消耗: 464K, 提交时间: 2023-05-19 23:52:01

#include <bits/stdc++.h>
using namespace std;
int a[105][105];
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		int n,m;
		cin>>n>>m;
		for(int i=1;i<=m;i++)
		    for(int j=1;j<=n;j++)
		        cin>>a[i][j];
		int ans=1e9;
		for(int i=1;i<=m;i++)
		    for(int j=1;j<=n;j++)
		    {
		    	int x=0;
		    	for(int k=1;k<=m;k++)
		    	    for(int l=1;l<=n;l++)
		    	    	x+=(abs(k-i)+abs(l-j))*a[k][l];
				ans=min(ans,x);
			}
		cout<<ans<<endl;
	}
	return 0;
}

C++14(g++5.4) 解法, 执行用时: 1352ms, 内存消耗: 780K, 提交时间: 2020-03-09 21:01:44

#include<bits/stdc++.h>
using namespace std;
int a[105][105];
int n,m;
int main() 
{
	int t;
	cin>>t;
	while(t--)
	{
		cin>>m>>n;
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++) cin>>a[i][j];
		int res=1e9;
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++)
			{
				int ans=0;
				for(int k=1;k<=n;k++)
					for(int p=1;p<=m;p++)
					{
						ans=ans+a[k][p]*(abs(i-k)+abs(j-p));
					}
				res=min(res,ans);
			}
			cout<<res<<endl;
		
	}
	return 0;
}

上一题