D. Program(有点难度的线性DP)

简介: D. Program(有点难度的线性DP)

题目

D. Program

题意

给一个长度为n的‘+’,‘-’序列,表示+1和-1 在给m个查询,问忽略[l,r]之间的序列,能走到多少个不同的数字

思路

  • 分为前后缀计算,前缀计算比较简单关键是后缀计算
  • 后缀上,需要关注能够到达的最小值和最大值
  • 定义sufL[i]和sufR[i]分别表示为到达的最小值和最大值
  • 可以得出转移方程
  • now = s[i] == '+' ? 1 : -1;
  • sufR[i] = max(sufR[i + 1] + now, 0);
  • sufL[i] = min(sufL[i + 1] + now, 0);

代码

cpp

复制代码

const int N = 2e5+10;
char s[N];
int preL[N], preR[N], pre_cur[N];
int sufL[N], sufR[N];
void solve()
{
    int n, m;
    cin >> n >> m;
    cin >> s + 1;
    preL[0] = preR[0] = pre_cur[0] = 0;
    for (int i = 1; i <= n;i ++)
    {
        pre_cur[i] = pre_cur[i - 1] + (s[i] == '+' ? 1 : -1);
        preL[i] = min(pre_cur[i], preL[i - 1]);
        preR[i] = max(pre_cur[i], preR[i - 1]);
    }
    sufL[n + 1] = sufR[n + 1] = 0;
    for (int i = n; i >= 1;i --)
    {
        int now = s[i] == '+' ? 1 : -1;
        sufR[i] = max(sufR[i + 1] + now, 0);
        sufL[i] = min(sufL[i + 1] + now, 0);
        // debug2(sufL[i], sufR[i]);
    }
    for (int i = 1; i <= m; i++)
    {
        int l, r;
        cin >> l >> r;
        l--;r++;
        int maxx = max(0, preR[l]), minn = min(0, preL[l]);
        maxx = max(maxx, sufR[r] + pre_cur[l]);
        minn = min(minn, sufL[r] + pre_cur[l]);
        // debug2(maxx, minn);
        cout << maxx - minn + 1 << endl;
    }
}



相关文章
|
1月前
|
算法 开发者 Python
惊呆了!Python算法设计与分析,分治法、贪心、动态规划...这些你都会了吗?不会?那还不快来学!
【7月更文挑战第10天】探索编程巅峰,算法至关重要。Python以其易读性成为学习算法的首选。分治法,如归并排序,将大问题拆解;贪心算法,如找零问题,每步求局部最优;动态规划,如斐波那契数列,利用子问题解。通过示例代码,理解并掌握这些算法,提升编程技能,面对挑战更加从容。动手实践,体验算法的神奇力量吧!
55 8
|
2月前
|
算法 iOS开发
程序与技术分享:2020CCPC秦皇岛K【Kindom'sPower】(树上贪心dp)
程序与技术分享:2020CCPC秦皇岛K【Kindom'sPower】(树上贪心dp)
14 0
|
2月前
|
SQL 算法 数据可视化
python 贪心算法 动态规划实现 跳跃游戏ll【力扣题45】
python 贪心算法 动态规划实现 跳跃游戏ll【力扣题45】
|
3月前
|
存储
【错题集-编程题】合唱团(动态规划 - 线性 dp)
【错题集-编程题】合唱团(动态规划 - 线性 dp)
Bugku CTF Simple_SSTI_2 解题思路
Bugku CTF Simple_SSTI_2 解题思路
93 0
Bugku CTF Simple_SSTI_1 解题思路
Bugku CTF Simple_SSTI_1 解题思路
69 0
|
PHP
BugKu 矛盾 解题思路
BugKu 矛盾 解题思路
52 0
|
3月前
【每日一题Day208】LC1335工作计划的最低难度 | 动态规划
【每日一题Day208】LC1335工作计划的最低难度 | 动态规划
35 0
|
10月前
|
算法 IDE Java
【洛谷算法题】P1001-A+B Problem【入门1顺序结构】
【洛谷算法题】P1001-A+B Problem【入门1顺序结构】
|
算法 C语言 C++
数据结构实验一 程序开发环境及算法的时间复杂度
数据结构实验一 程序开发环境及算法的时间复杂度
67 0