zoukankan      html  css  js  c++  java
  • ZOJ 1107FatMouse and Cheese(BFS)

    题目链接

    分析: 一个n * n的图,每个点是一个奶酪的体积,从0,0开始每次最多可以走k步,下一步体积必须大于上一步,求最大体积和

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <queue>
     4 #include <cstring>
     5 #include <algorithm>
     6 using namespace std;
     7 const int Max = 550 + 10;
     8 const int INF = 0x3f3f3f3f;
     9 int g[Max][Max], dp[Max][Max];
    10 int n, k;
    11 int gx[4] = {0, 0, 1, -1};
    12 int gy[4] = {1, -1, 0, 0};
    13 struct Node
    14 {
    15     int x, y;
    16 
    17 };
    18 void bfs(int x, int y)
    19 {
    20     Node node;
    21     node.x = x;
    22     node.y = y;
    23     dp[x][y] = g[x][y];
    24     queue<Node> que;
    25     que.push(node);
    26     int maxn = -INF;
    27     while (!que.empty())
    28     {
    29         node = que.front();
    30         que.pop();
    31         if (dp[node.x][node.y] > maxn)
    32             maxn = dp[node.x][node.y];
    33         for (int i = 0; i < 4; i++)
    34         {
    35             for (int j = 1; j <= k; j++)
    36             {
    37                 int fx = node.x + gx[i] * j;
    38                 int fy = node.y + gy[i] * j;
    39                 if (fx >= 1 && fy >= 1 && fx <= n && fy <= n && g[fx][fy] > g[node.x][node.y])
    40                 {
    41                     if (dp[fx][fy] < g[fx][fy] + dp[node.x][node.y])
    42                     {
    43                         dp[fx][fy] = g[fx][fy] +  dp[node.x][node.y];
    44                         Node temp;
    45                         temp.x = fx;
    46                         temp.y = fy;
    47                         que.push(temp);
    48                     }
    49                 }
    50             }
    51         }
    52     }
    53     printf("%d
    ", maxn);
    54 }
    55 int main()
    56 {
    57     while (scanf("%d%d", &n, &k) != EOF)
    58     {
    59         if (n == -1 && k == -1)
    60             break;
    61         for (int i = 1; i <= n; i++)
    62             for (int j = 1; j <= n; j++)
    63                 scanf("%d", &g[i][j]);
    64         memset(dp, 0, sizeof(dp));
    65         bfs(1, 1);
    66     }
    67     return 0;
    68 }
    View Code
  • 相关阅读:
    整数的位数,及反转
    判断1~n有多少个1
    C语言常用字符串函数
    C语言类型转换原理
    printf()函数压栈a++与++a的输出
    49 丑数( 时间空间效率的平衡)
    42 连续子数组的最大和(时间效率)
    41 数据流中的中位数(时间效率)
    40 最小的K个数(时间效率)
    一、简介 ELO商户类别推荐有助于了解客户忠诚度
  • 原文地址:https://www.cnblogs.com/zhaopAC/p/5389304.html
Copyright © 2011-2022 走看看