zoukankan      html  css  js  c++  java
  • [补]2019nowcoder牛客第一场E、I

    红小豆发现第一场的可以挂出来了owo

    E  ABBA

      当时读题之后想得很复杂,什么B前面得有n个A,A前面得有m个B,然后就睡着了(x

      补题的时候感觉确实是这么个思路,参考了官方题解楼的众位大佬写的题解,比较容易理解的思路大概是这样:

        如果当前B的数量没有比A多m个,那么仍可以继续放B;

        如果当前A的数量没有比B多n个,那么仍可以继续放A,并且与上述情况不互斥

      需要注意的地方是,如果用每次都用memset清空dp数组就会tle,只能是用多少清空多少(多次加入debuglist豪华套餐)。转移的时候要用到上一位的情况,就整个数组挪一位。

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    using namespace std;
    typedef long long ll;
    const int mod = 1e9 + 7;
    int d[2005][2005];
    int n, m;
    
    int main()
    {
        while (cin >> n >> m) {
            for (int i = 1; i <= n + m + 1; i++)
                for (int j = 1; j <= n + m + 1; j++)
                    d[i][j] = 0;
            d[1][1] = 1;
            for (int i = 1; i <= n + m+1; i++)
                for (int j = 1; j <= n + m+1; j++) {
                    if (j - i <= m)d[i][j] = (d[i][j] + d[i][j - 1]) % mod;
                    if (i - j <= n)d[i][j] = (d[i][j] + d[i - 1][j]) % mod;
                }
            cout << d[n + m + 1][n + m + 1] << endl;
        }
    
        return 0;
    }
    E ABBA

    I  Points Division

      参考于此:https://blog.csdn.net/u013534123/article/details/96465704

      正在魔改,研究为什么不能(能)从右上往左下扫点,尚无合理结果。。。

  • 相关阅读:
    第六周总结
    第五周总结
    第四周总结
    7-1 抓老鼠啊~亏了还是赚了?
    春季学期第八周作业
    春季学期第七周作业
    春季学期第六周作业
    春季学期第五周作业
    春季学期第四周作业
    春季学期第三周作业
  • 原文地址:https://www.cnblogs.com/non-/p/11254475.html
Copyright © 2011-2022 走看看