cf1453F 二维DP 思维

原题链接

题意

目前我们有一个序列,在第i个点可以走到[i + 1, i + a[i]]区间内的任意一点(也就是说如果a[i]是0,路就走不通了)

现在要求我们将一些位置置零,使得从1走到n只有一条路径。输出最小置零数量,保证输入有解。

思路

  • 因为n<=3000,所以尝试二维动态规划。首先设计状态是最重要的一步,我们定义 \(F_{i,j}\) 为从1到i仅有一条路径,且路径中的点最远到达不超过j,这种情况下的最小置零个数。
  • 那么显然 \(F_{1,j}\) 全为0,答案为 \(F_{n,n}\)
  • 从2开始计算,对于当前的i,我们枚举i - 1 ~ 1的所有点,如果有 \(j + a_j \ge i\),那么我们当前的 \(F_{i,j + a_j}\)就是可以更新的, 转移方程如下
\[F_{i,j + a_j} = min(F_{i,j + a_j}, F_{j, i - 1} + cnt)
\]

其中cnt是从j + 1到i - 1所有的点中,能够到达i的点的数量(就是说这些cnt个点都需要置零),由于我们是从i - 1到1的顺序枚举的,所以cnt可以顺带记录

AC代码

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std; int ff[3005][3005], aa[3005];
int t, n; int main()
{
scanf("%d", &t);
while (t--)
{
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
{
scanf("%d", &aa[i]);
for (int j = 1; j <= n; ++j)
{
ff[i][j] = 99999999;
}
}
for (int i = 1; i <= n; ++i)
{
ff[1][i] = 0;
}
for (int i = 2; i <= n; ++i)
{
int cnt = 0;
for (int j = i - 1; j >= 1; --j)
{
if (j + aa[j] >= i)
{
ff[i][j + aa[j]] = min(ff[i][j + aa[j]], ff[j][i - 1] + cnt);
++cnt;
}
}
for (int j = i + 1; j <= n; ++j)
{
ff[i][j] = min(ff[i][j - 1], ff[i][j]);
}
}
printf("%d\n", ff[n][n]);
}
return 0;
}

cf1453F 二维DP 思维的更多相关文章

  1. HDU - 2159 FATE(二维dp之01背包问题)

    题目: ​ 思路: 二维dp,完全背包,状态转移方程dp[i][z] = max(dp[i][z], dp[i-1][z-a[j]]+b[j]),dp[i][z]表示在杀i个怪,消耗z个容忍度的情况下 ...

  2. 洛谷p1732 活蹦乱跳的香穗子 二维DP

    今天不BB了,直接帖原题吧  地址>>https://www.luogu.org/problem/show?pid=1732<< 题目描述 香穗子在田野上调蘑菇!她跳啊跳,发现 ...

  3. 传纸条 NOIP2008 洛谷1006 二维dp

    二维dp 扯淡 一道比较基本的入门难度的二维dp,类似于那道方格取数,不过走过一次的点下次不能再走(看提交记录里面好像走过一次的加一次a[i][j]的也AC了,,),我记得当年那道方格取数死活听不懂, ...

  4. 洛谷P1048 采药 二维dp化一维

    题目描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个 ...

  5. 关于二维DP————站上巨人的肩膀

    意匠惨淡经营中ing, 语不惊人死不休........ 前几天学了DP,做了个简单的整理,记录了关于DP的一些概念之类的,今天记录一下刚学的一个类型 ----关于二维DP 那建立二维数组主要是干嘛用的 ...

  6. BZOJ 2748: [HAOI2012]音量调节【二维dp,枚举】

    2748: [HAOI2012]音量调节 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 2010  Solved: 1260[Submit][Statu ...

  7. To the Max 二维dp(一维的变形)

    Description Given a two-dimensional array of positive and negative integers, a sub-rectangle is any ...

  8. POJ 1661 Help Jimmy(二维DP)

    题目链接:http://poj.org/problem?id=1661 题目大意: 如图包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无限. Jimmy老鼠在时刻0从高于所有平台的 ...

  9. SGU104 二维dp

    大致题意: n个东西放在(1.2.3...m)个容器中,先放的必需在后方的左边.a[i][j]表示i号物品放在j容器所得 的价值,求最大价值. 几乎是刚刚开始接触动态规划题,开始我这样想 每个东西一件 ...

  10. 洛谷1387(基础二维dp)

    题目很简单,数据也很小,但是思路不妨借鉴:dp[i][j]代表以(i,j)为右下角的最长正方形边长. 类比一维里面设“以XX为结尾的最XXX(所求)”. 另外define不要乱用!尤其这种min套mi ...

随机推荐

  1. ERP 财务管理的应付帐款流程

    导读:应付帐款流程与应收帐款流程是财务管理的开端,也是财务工作的主要流程.若能够这两大流程控制好了,ERP系统的财务模块也就成功了一大半了.我先讲一下财务管理的应付帐款流程. 企业的应付帐款有很多种类 ...

  2. 【matplotlib 实战】--散点图

    散点图,又名点图.散布图.X-Y图,是将所有的数据以点的形式展现在平面直角坐标系上的统计图表. 散点图常被用于分析变量之间的相关性.如果两个变量的散点看上去都在一条直线附近波动,则称变量之间是线性相关 ...

  3. 2021北京智源大会SNN部分

    神经形态视觉计算 当前问题: spikes vs bits (脉冲 vs 位) meurons vs memory (神经元 vs 计算单元)(真空管vacuum tube,晶体管transistor ...

  4. RTMP协议学习——从握手到播放

    从客户端发起播放请求,到rtrmp视频流开始播放,大致经过了握手->建立连接->创建流->播放这几步比较重要的步骤.下面我将结合wireshark的抓包,对其中的每个流程进行分析和学 ...

  5. CSP-S 考前备战——常考知识点串烧

    1.树形结构 与 树形dp PS :在CSP-S 2019,CSP-J 2020,CSP-S 2020,CSP-S 2021 均有考查 此类问题的做题方法就是将问题转化成树上的问题,然后进行深度优先遍 ...

  6. Educational Codeforces Round 105 (Rated for Div. 2) A-C题解

    写在前边 链接:Educational Codeforces Round 105 (Rated for Div. 2) A. ABC String 链接:A题链接 题目大意: 给定一个有\(A.B.C ...

  7. mysq数据库查询之分组查询

    一.什么是分组查询分组查询:将查询结果按照指定字段进行分组二.分组查询的基本语法select 查询字段 from 表名 [where 条件] group by 分组字段名 [having 条件表达式] ...

  8. Electron-React18-MacOS桌面管理系统|electron27+react仿mac桌面

    基于React18+Electron27+ArcoDesign仿macOS桌面端系统框架ElectronMacOS. electron-react-macOs 基于electron27.x+vite4 ...

  9. 在路上---学习篇(一)Python 数据结构和算法 (1)

    数据结构和算法 现阶段的肤浅理解数据结构是各式各样的类型数据在内存中是如何构造的,原理是怎么样的. 了解了其本质后,在面对问题时候,根据数据结构利用算法计算可以最快,最有效的完成任务.通常情况下,精心 ...

  10. WPF 纯XAML实现NumericUpDown 控件

    本文由 飞羽流星(Flithor/毛茸茸松鼠先生/Squirrel.Downy)原创,欢迎分享转载,但禁止以原创二次发布原文地址:https://www.cnblogs.com/Flithor/arc ...