#include <iostream> #include <algorithm> #define MAXN 3000 using namespace std; struct node { int x; int y; int v; }; bool op(node a,node b); node _node[MAXN]; int main() { //freopen("acm.acm","r",stdin); int i; int j; int m; int n; int k; int tem; int test; int index; int sum; cin>>test; while(test --) { cin>>m; cin>>n; cin>>k; index = 0; for(i = 0; i < m; ++ i) { for(j = 0; j < n; ++ j) { cin>>tem; if(tem > 0) { _node[index].v = tem; _node[index].x = i; _node[index].y = j; ++ index; } } } sort(_node,_node+index,op); sum = 0; k -= 2; i = 0; if(_node[i].x*2+1 <= k) { sum += _node[i].v; k -= _node[i].x+1; ++ i; } else { cout<<0<<endl; continue; } // cout<<i<<endl; while(true) { // cout<<"sum----------"<<sum<<endl; // cout<<"time-----------"<<k<<endl; // cout<<" ***************88 "<<abs(_node[i].x - _node[i-1].x) + abs(_node[i].y - _node[i-1].y) + _node[i].x<<endl; if(abs(_node[i].x - _node[i-1].x) + abs(_node[i].y - _node[i-1].y) + _node[i].x +1> k) { break; } else { sum += _node[i].v; k -= abs(_node[i].x - _node[i-1].x) + abs(_node[i].y - _node[i-1].y)+1; ++ i; } } cout<<sum<<endl; } } bool op(node a,node b) { if(a.v > b.v) { return true; } return false; }
关注我的公众号,当然,如果你对Java, Scala, Python等技术经验,以及编程日记,感兴趣的话。
技术网站地址: vmfor.com