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. 聊聊基于Alink库的特征工程方法

    示例代码及相关内容来源于<Alink权威指南(Java版)> 独热编码 OneHotEncoder 是用于将类别型特征转换为独热编码的类.独热编码是一种常用的特征编码方式,特别适用于处理类 ...

  2. 分享一个Redis自带的压测工具:redis-benchmark

    前言 今天给xdm分享一个Redis自带的压测工具:redis-benchmark. 介绍 redis-benchmark 是一个用于测试 Redis性能的基准测试工具,可以帮助开发人员评估和比较 R ...

  3. React技术栈支援Vue项目,你需要提前了解的

    写在前面 react整体是函数式的思想,把组件设计成纯组件,状态和逻辑通过参数传入,而vue的思想是响应式的,也就是基于是数据可变的,通过对每一个属性建立Watcher来监听, 当属性变化的时候,响应 ...

  4. liunx远程管理常用命令笔记

    1,关机/重启 shutdown -r now : 立刻重启的命令 2,查看或配置网卡信息 2.1  网卡和 IP 地址 2.2  ifconfig 用了管道和grep 查找到 IP 地址 2.3 p ...

  5. node版本依赖报错那些事儿

    前言 昨天还能跑的的项目,今天就歇菜了 第一步 删除大法 依赖问题,那就把.lock/ node_modules 删除重新装 第二步 如果重装不好使,那就各种降低版本尝试 遇到这样的 有两种方式 1. ...

  6. mysql insert的特殊用法

    1. 正常的insert语句:插入一条数据如下:INSERT INTO `testdb`.`tb_user` (`id`, `userName`) VALUES (3, '张飞'); 2. inser ...

  7. [WPF]标记扩展(Markup Extension)

    XAML是基于XML的语言,其遵循并扩展了XML的语法规则.其中一项扩展就是标记扩展(Markup Extension),比如我们经常使用的绑定Binding和x:Type. 什么是标记扩展 标记扩展 ...

  8. 大白话说Python+Flask入门(二)

    写在前面 笔者技术真的很一般,也许只靠着笨鸟先飞的这种傻瓜坚持,才能在互联网行业侥幸的生存下来吧! 为什么这么说? 我曾不止一次在某群,看到说我写的东西一点技术含量都没有,而且很没营养,换作一年前的我 ...

  9. Java 删除PDF页面 (免费工具分享)

    对PDF页面的增删通常需要借助专门的工具,而这些工具一般需要付费才能使用.那么我们可以通过Java代码免费实现这一功能吗?答案是肯定的.这篇文章就教大家如何使用一个免费的国产Java库来删除PDF中的 ...

  10. 在PowerShell脚本中获取程序集文件属性的指定元数据特性的方法——AssemblyMetadataAttribute

    在PowerShell脚本中获取程序集文件属性的指定元数据特性的方法--AssemblyMetadataAttribute <# .SYNOPSIS 获取程序集文件属性的指定元数据特性 .DES ...