题解 | #S 老师的公式#

S 老师的公式

https://ac.nowcoder.com/acm/contest/76652/A

S 老师的签到

开始一看是动规的数字三角形的板子题,发现空间太大吃了一个罚时,之后,考虑对答案字符串每一个位置进行优化,发现需要考虑位置的可连接性,于是又吃一个罚时,再然后考虑深搜,优化了好几遍还是吃了几个罚时结束。

最后还是用到了数字三角形的动规并考虑了位置的可连续性,然后优化了好几次边界问题,感觉有点儿像瞎搞,不过最后还是过了。

贴一下代码吧:

#include <bits/stdc++.h>
using namespace std;
const int N = 2000;
char mp[N][N];
int v[N*4];
string ans;
int n, m, k;
typedef pair<int, int> p;
p q[N * 2 + 10][2*N];
int main()
{
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            cin >> mp[i][j];

    for (int i = 0; i <= n + m - 2; i++)
        ans += 'z';
    ans[0] = mp[1][1];
    v[0] = 1;
    q[0][1] = {1, 1};
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            if (i == 1 && j == 1)
                continue;
            if (ans[i + j - 2] >= mp[i][j] || i + j - 2 > k)
            {
                bool flag = 0;
                for (int m = 1; m <= v[i + j - 3]; m++)
                {
                    auto k = q[i + j - 3][m];
                    if (i - 1 == k.first && j == k.second)
                    {
                        flag = 1;
                        break;
                    }
                    else if (i == k.first && j - 1 == k.second)
                    {
                        flag = 1;
                        break;
                    }
                }
                if (flag && (ans[i + j - 2] > mp[i][j] || i + j - 2 > k))
                {
                    k = i + j - 2;
                    v[i + j - 2] = 0;
                    ans[i + j - 2] = mp[i][j];
                    q[i + j - 2][++v[i + j - 2]] = {i, j};
                }
                if (flag && ans[i + j - 2] >= mp[i][j])
                {
                    ans[i + j - 2] = mp[i][j];
                    q[i + j - 2][++v[i + j - 2]] = {i, j};
                }
            }
        }
    }
    cout << ans;
    return 0;
}
全部评论
我dp过了,枚举第i行时,只跟这一行和上一行有关系,所以这一行求完后可以把上一行占用的空间释放掉,但是时间复杂度应该是O(n³),不知道为什么能过
点赞 回复 分享
发布于 2024-03-15 22:18 重庆
bfs吧,这个看起来太怪了
点赞 回复 分享
发布于 2024-03-15 22:09 上海

相关推荐

浩浩没烦恼:一二面加起来才一个小时? 我一面就一个小时多了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务