水题。。。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
typedef struct node {
int x, y, val;
}node;
bool operator <(node a, node b)
{
return a.val < b.val;
}
priority_queue<node> que;
int n, m, k;
int main()
{
int t;
for(scanf("%d", &t); t--; ) {
scanf("%d%d%d", &n, &m, &k);
while(!que.empty()) que.pop();
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
int temp;
scanf("%d", &temp);
if(temp != 0) {
node a;
a.x = i; a.y = j; a.val = temp;
que.push(a);
}
}
}
int cost = 0, ans = 0, px = -1, py = -1;
while(!que.empty() && cost < k) {
node cur = que.top(); que.pop();
if(px == -1) {
cost++;
cost += cur.x;
px = cur.x; py = cur.y;
}
else {
cost += abs(cur.x - px) + abs(cur.y - py);
px = cur.x;
py = cur.y;
}
cost++;
if(px + 1 > k - cost)
break;
ans += cur.val;
}
printf("%d\n", ans);
}
return 0;
}