P1086 花生采摘——模拟

题目的大概的意思是在给定时间之内,在一个二维网格中,尽量取到最大的数字之和(注意取数字也要耗费时间)。以下是这题的思路:
1.建立结构体数组保存网格中非0数字、坐标
2.按照数字大小升序排序
3.使用曼哈顿算法计算取数字花费的时间,并与给定时间比较,如果不超过给定时间代表可以取数
具体细节请看注释

#include 
#include 
#include 
using namespace std;
const int maxn=55;
struct node//保存数字的值与坐标信息
{
    int x,y,val;
};
int m,n,k,a[maxn][maxn];//a是二维网格
node p[maxn*maxn];//结构体数组

bool cmp(node x,node y)//按数字大小排序
{
    return x.val>y.val;
}

int main()
{
    ios::sync_with_stdio(false);
    cin>>m>>n>>k;
    int s=1;
    for(int i=0;i>a[i][j];
            if(a[i][j])
            {
                p[s].val=a[i][j];
                p[s].x=i+1;
                p[s].y=j+1;
                s++;
            }
        }
    sort(p+1,p+s,cmp);//按数字大小排序
    int sum=0,t=0;//t代表已经花费的时间
    for(int i=1;i

你可能感兴趣的:(康复训练)