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; }