POJ 1928

#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

原文地址:https://www.cnblogs.com/gavinsp/p/4566577.html