当前位置: 首页 > article >正文

A - Block Sequence

思路:

(1)对于每一个位置,有三种选择,一是选择删除,二是选择当排头清洗,三是被前面的排头清洗;

(2)注意到总是要求将最后一位数清洗完,即前面信息依赖后面信息,于是考虑从后往前分析,令f[i]描述i~n最小代价,则对于第i位,可选择

  1. 删除: f[i] = f[i +1] + 1;
  2. 清洗:f[i] = f[i + a[i] + 1]
  3. 等待清洗:由于我们只讨论i~n位的信息,所以必须保证第i位被清洗,故不可等待。

代码:

#include <iostream>
#include <queue>
using namespace std;
const int maxn = 2e5 + 10;
int dp[maxn], a[maxn];

void solve() { 
	int n;
	
    cin >> n;

    for (int i = 1; i <= n; ++i) {
        cin >> a[i];
    }
    dp[n] = 1;
    dp[n+1] = 0;
    for (int i = n - 1; i >= 1; --i) {
        dp[i] = 1 + dp[i+1]; // 删除第i个
        if (i + a[i] <= n) { // 利用第i个做为区间起点
            dp[i] = min(dp[i], dp[i+a[i]+1]);
        }
    }

    printf("%d\n", dp[1]);
}
int main() 
{
	int t;
	cin >> t;
	while(t --)
	{
		solve();
	}
	
    
    return 0;
}


http://www.kler.cn/a/105586.html

相关文章:

  • 判断对象a的值是否小于对象boperator.lt()
  • axios封装以及详细用法
  • rust OJ实战
  • 【已解决】Qt发送信号后,槽函数没有响应
  • LeetCode75——Day17
  • 矢量图形编辑软件Illustrator 2023 mac中文版软件特点(ai2023) v27.9
  • 太烂的牌也要打完只为自己也不是为了其他什么原因。
  • 腾讯云国际站服务器端口开放失败怎么办?
  • Java零基础入门-逻辑运算符
  • 第七节——Vue中定义组件状态驱动视图
  • 25期代码随想录算法训练营第二天 | 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
  • 多线程---创建线程的七种方式
  • 自动化测试系列 —— UI自动化测试
  • 用图说话——流程图进阶
  • Python字典-dict “ “ ---记一次查缺补漏“ “
  • CMake教程-第 10 步:选择静态或共享库
  • LSKA(大可分离核注意力):重新思考CNN大核注意力设计
  • 鸿运主动安全监控云平台任意文件下载漏洞复现 [附POC]
  • postgis ST_CoverageInvalidEdges使用说明
  • 软考高级系统架构设计师系列之:案例分析典型试题四