• 一天一道算法题——优先队列


    题目【[SHOI2002]滑雪】:https://www.luogu.com.cn/problem/P1434

    解法可以用记忆化搜索,也可以DP。

    这里我选了DP,使用了优先队列存储每个高度,从而实现从低到高的递推。

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<queue>
     4 using namespace std;
     5 
     6 struct node {
     7     int i, j, num;
     8 } a;
     9 struct cmp1 {
    10     bool operator()(node x, node y) {
    11         return x.num > y.num;
    12     }
    13 };
    14 int maxn, r, c, f[110][110], g[110][110];
    15 int main() {
    16     priority_queue<node,vector<node>,cmp1> q;
    17     cin >> r >> c;
    18     for (int i = 1; i <= r; i++) {
    19         for (int j = 1; j <= c; j++) {
    20             cin >> g[i][j];
    21             f[i][j] = 1;
    22             a.i = i, a.j = j, a.num = g[i][j];
    23             q.push(a);
    24         }
    25     }
    26     int i, j;
    27     while (q.size()) {
    28         a = q.top(); q.pop();
    29         i = a.i, j = a.j;
    30         if (g[i - 1][j] < a.num)f[i][j] = max(f[i][j], f[i - 1][j] + 1);
    31         if (g[i + 1][j] < a.num)f[i][j] = max(f[i][j], f[i + 1][j] + 1);
    32         if (g[i][j+1] < a.num)f[i][j] = max(f[i][j], f[i][j+1] + 1);
    33         if (g[i][j-1] < a.num)f[i][j] = max(f[i][j], f[i ][j-1] + 1);
    34         maxn = max(maxn, f[i][j]);
    35     }
    36     cout << maxn;
    37     return 0;
    38 }
  • 相关阅读:
    属性MyBank
    C#语法
    NTE与C#
    css3制作网页动画
    网页定位元素
    使用ADO.NET访问数据库
    连接查询和分组查询
    模糊查询和聚合函数
    习题集
    用sql语句操作数据
  • 原文地址:https://www.cnblogs.com/zyyz1126/p/12669045.html
Copyright © 2020-2023  润新知