首页 > 其他分享 >CodeForces 1927G Paint Charges

CodeForces 1927G Paint Charges

时间:2024-02-09 10:55:04浏览次数:43  
标签:typedef 覆盖 Charges long Paint int maxn 1927G define

洛谷传送门

CF 传送门

看到 \(n \le 100\) 考虑 \(O(\text{poly}(n))\) dp。发现从左向右决策,因为一个点可以向左或向右覆盖,所以需要记最靠左的未覆盖的位置 \(j\) 和最靠右的已覆盖位置 \(k\),状态就是 \(f_{i, j, k}\),dp 最小的覆盖次数。

转移的讨论很简单。考虑不覆盖还是向左或向右覆盖,若向左或向右覆盖看能否覆盖到 \(j\) 或 \(k\)。这样转移是 \(O(1)\) 的。总时间复杂度 \(O(n^3)\)。

code
// Problem: G. Paint Charges
// Contest: Codeforces - Codeforces Round 923 (Div. 3)
// URL: https://codeforces.com/contest/1927/problem/G
// Memory Limit: 256 MB
// Time Limit: 4000 ms
// 
// Powered by CP Editor (https://cpeditor.org)
 
#include <bits/stdc++.h>
#define pb emplace_back
#define fst first
#define scd second
#define mkp make_pair
#define mems(a, x) memset((a), (x), sizeof(a))
 
using namespace std;
typedef long long ll;
typedef double db;
typedef unsigned long long ull;
typedef long double ldb;
typedef pair<ll, ll> pii;
 
const int maxn = 110;
 
int n, a[maxn], f[maxn][maxn][maxn];
 
void solve() {
	scanf("%d", &n);
	for (int i = 1; i <= n; ++i) {
		scanf("%d", &a[i]);
	}
	mems(f, 0x3f);
	f[0][1][0] = 0;
	for (int i = 1; i <= n; ++i) {
		for (int j = 1; j <= n + 1; ++j) {
			for (int k = 0; k <= n; ++k) {
				f[i][j][k] = min(f[i][j][k], f[i - 1][j][k]);
				if (max(i - a[i] + 1, 1) <= j && j <= i) {
					int nk = max(i, k);
					f[i][nk + 1][nk] = min(f[i][nk + 1][nk], f[i - 1][j][k] + 1);
				}
				int nk = min(i + a[i] - 1, n);
				if (nk > k) {
					int nj = (i <= j && j <= nk ? nk + 1 : j);
					f[i][nj][nk] = min(f[i][nj][nk], f[i - 1][j][k] + 1);
				}
			}
		}
	}
	printf("%d\n", f[n][n + 1][n]);
}
 
int main() {
	int T = 1;
	scanf("%d", &T);
	while (T--) {
		solve();
	}
	return 0;
}

标签:typedef,覆盖,Charges,long,Paint,int,maxn,1927G,define
From: https://www.cnblogs.com/zltzlt-blog/p/18012372

相关文章

  • CF1764H Doremy's Paint 2 题解
    题目链接:CF或者洛谷高分题,感觉挺有意思的题,值得一提的是这个题的\(1\)和\(3\)版本却是两个基础题。一开始以为跟这道差不多:P8512[YnoiEasyRound2021]TEST_152题解。后面重新读了一下发现一个有趣的点:也就是是说操作的\(val\)并不太好搞了,如果\(val\)确定就基......
  • MFC OnPaint 绘制一行简单文字
    ▲绘制一行简单文字OnPaint()消息。voidCMFCApplication6Dlg::OnPaint(){CPaintDCcdc(this);/***OnPaint绘制简单文字*****/cdc.TextOutW(100,100,TEXT("你好,MFC!")); if(IsIconic()) { CPaintDCdc(this);//用于绘制的设备上下文 SendMessa......
  • CF1764H Doremy's Paint 2 题解
    题目链接先断环成链,由于对于多组询问不好一起处理,我们先考虑单组询问的处理方式。一个很暴力的想法是每次模拟题目要求的操作并且最后数颜色,我们这是在通过下标进行操作最后再数颜色,而很多对于下标的操作都是不必要的,考虑直接枚举颜色进行判定。对于每种颜色,它对于最后答案有贡......
  • 14、绘制图形(QPainter)
    效果 //定义一个新的类#ifndefPAINTERAREA_H#definePAINTERAREA_H#include<QObject>#include<QWidget>//QPen画笔是基本的图形对象,绘制直线、曲线、多边形等形状#include<QPen>//QBrush画刷是基本的图形对象,主要用于填充,比如矩形、多边形等形状#include<Q......
  • 在线P图工具(基于minipaint开发)
    在浏览github过程中,发现一个超级实用的仓库,viliulsle开发的minipaint,类似于photoshop的网页版。基于webpack开发的,打包非常简单,故自己搭建了一套。在线预览在线ps网页版源码地址https://github.com/viliusle/miniPaint功能介绍文件:打开图像,目录,URL,数据URL,拖放,保存(PNG,JPG,B......
  • 使用QPainter制作一个简易的相册
    PlayImage记得一键三连哦一个使用简单的QPainter绘图事件实现图片播放器的简易demo支持图片切换支持多路更新,自己扩展即可支持幻灯片播放PlayImage自定义控件支持复用,对外提供updateImage和updatePixmap接口,对传入的image和pixmap进行图片更新PlayImage控件支持多线程调......
  • 什么是 Web 应用性能参数中的 First Contentful Paint
    "FirstContentfulPaint"(简称FCP)是一个非常重要的性能指标,用于测量我们的网页在用户的设备上渲染出第一片有意义内容的时间点。这个指标是Web性能用户体验的关键部分,因为它直接关系到用户对网站加载速度的第一印象。在互联网世界中,每一毫秒的延迟都可能影响用户的满意度,甚至影......
  • 浏览器关于 Largest Contentful Paint (LCP) 的计算机制
    LargestContentfulPaint(LCP)是一种用户体验的性能指标,旨在帮助开发者了解用户在浏览网页时视觉渲染的速度。LCP主要衡量的是视觉上最大的页面元素何时出现在屏幕上,这包括图像元素、视频元素或者包含文本的元素(如段落或列表项)。如果LCP时间较长,用户可能会感觉到页面加载速......
  • 什么是前端应用开发的 LCP(Largest Contentful Paint) 指标
    在网页性能优化的领域里,LCP(LargestContentfulPaint,最大内容绘制)是一个非常重要的性能指标。它测量的是从页面开始加载到页面的"主要内容"完全呈现在屏幕上所需的时间。换句话说,LCP是测量用户何时看到页面的"主要内容"的指标。在理解LCP之前,我们需要知道一个概念,那就是......
  • 白屏时间first paint和可交互时间dom ready的关系是先触发first paint ,后触发dom read
    页面的性能指标详解:白屏时间(firstPaintTime)——用户从打开页面开始到页面开始有东西呈现为止首屏时间——用户浏览器首屏内所有内容都呈现出来所花费的时间用户可操作时间(domInteractive)——用户可以进行正常的点击、输入等操作,默认可以统计domready时间,因为通常会在这时......