poj1928

来源:互联网 发布:免费php虚拟主机 编辑:程序博客网 时间:2024/05/21 11:01

题目大意:

给一个矩阵,代表一片花生地,每个格子的交点可能有花生。一个单位时间可以走一步,或者捡花生。给定K个单位花生,问最多可以捡多少花生。

解题思路:

贪心算法,每次去捡最多的即可

代码如下:

#include<stdio.h>#include<math.h>int main(){    int t;    int m, n, k;    int num[60][60];    scanf("%d",&t);    while (t--)    {        scanf("%d%d%d",&m,&n,&k);        for (int i = 1; i <= m; i++)        {            for (int j = 0; j < n; j++)            {                scanf("%d",&num[i][j]);            }        }        int max = 0, x = 0, y = 0;        int px=0, py=0;        int flag = 0;        int total = 0;        int ret = 0;        while (1)        {            for (int i = 1; i <= m; i++)            {                for (int j = 0; j < n; j++)                {                    if (num[i][j] > max)                    {                        max = num[i][j];                        x = i; y = j;                    }                }            }            if (flag == 0)            {                px = 0; py = y;                flag = 1;            }            if (total + abs(x - px) + abs(y - py) + 1 + x <= k)            {                ret += max;                total += abs(x - px) + abs(y - py) + 1;                px = x;                py = y;                num[x][y] = -1;                max = 0;            }            else            {                printf("%d\n",ret);                break;            }        }    }    return 0;}
0 0