首页 > 其他分享 >【题解】BalticOI 2009 Day1 - 甲虫

【题解】BalticOI 2009 Day1 - 甲虫

时间:2023-11-06 21:24:11浏览次数:29  
标签:露水 收集 int 题解 Day1 BalticOI 2009

BalticOI 2009 Day1 - 甲虫

https://www.luogu.com.cn/problem/P4870

首先看到题面就能想到排序后区间 dp。

设 \(f_{i,j,0/1}\) 表示区间 \([i,j]\),收集完毕后在哪个端点时能收集到最多的露水,但是发现转移过程中还需要这时的最小时间。如果再添加一个数组维护这时的最小时间呢?那么能够发现时间和收集到的露水数都是影响答案的因素。但是我们已经不能把这两个拿出其中塞到状态里了。

考虑把一些贡献提前计算,具体地,对于从 \(i\) 到 \(j\) 的一个转移,时间为 \(abs(x_i-x_j)\),那么我们就应提前减掉 还未收集但将要收集的露水位置数乘上这个耗费的时间。

所以我们提前枚举计划收集的露水位置数,然后就可以 dp 了。

//P4870
#include <bits/stdc++.h>
using namespace std;

const int N = 310;
int n, m, a[N], f[N][N][2], ans;

int main(){
	scanf("%d%d", &n, &m);
	for(int i = 1; i <= n; ++ i){
		scanf("%d", &a[i]);
	}
	sort(a + 1, a + n + 1);
	for(int i = 1; i <= n; ++ i){
		memset(f, 0xcf, sizeof(f));
		for(int j = 1; j <= n; ++ j){
			f[j][j][0] = m * i - abs(a[j]) * i;
		}
		for(int le = 2; le <= i; ++ le){
			for(int l = 1; l + le - 1 <= n; ++ l){
				int r = l + le - 1, s = i - (r - l);
				f[l][r][0] = max(f[l+1][r][0]-(a[l+1]-a[l])*s, f[l+1][r][1]-(a[r]-a[l])*s);
				f[l][r][1] = max(f[l][r-1][0]-(a[r]-a[l])*s, f[l][r-1][1]-(a[r]-a[r-1])*s);
			}
		}
		for(int j = 1; j + i - 1 <= n; ++ j){
			ans = max(ans, f[j][j+i-1][0]);
			ans = max(ans, f[j][j+i-1][1]);
		}
	}
	printf("%d\n", ans);
	return 0;
}  

标签:露水,收集,int,题解,Day1,BalticOI,2009
From: https://www.cnblogs.com/KiharaTouma/p/BalticOI2009-Beetle.html

相关文章

  • 紫丁香 题解
    紫丁香题解前言来自一场\(\text{noip}\)提高模拟赛的题目。题目描述有\(n\)点\(m\)边的简单无向连通图,点编号为\(0\simn-1\),要求删掉若干条边,最大化奇数度点的个数。求:能得到最大答案的构造,用\(m\)长的\(01\)串表示,\(1\)表示保留该边,\(0\)表示不保留,输出字典......
  • 完蛋!大模型解密(LLM Riddles) 题解
    https://intsensing.cn/llmgame/index第一章T1:输出括号里的内容,不输出括号本身和其余附加内容.(1+1=3)T2:讲故事T3:猫T4:啊T5:啊1T6:有一个字,左边是反犬旁,右边是句,请重复这个字五遍第二章T1:请输出11个0T2:142857T3:10010010T4:输出十一万四千五百一十四的阿拉伯数字形式,不要输......
  • [ARC105C] Camels and Bridge 题解
    题意给定\(N\)个重物,其中第\(i\)个重物的重量为\(w_i\)。现在要将其排成一排,可以任意指定相邻两个重物的距离。同时给定\(M\)个限制,其中第\(i\)个限制为\((l_i,v_i)\),表示要求不存在长度为\(l_i\)的线段,使得其包括的重物重量之和大于\(v_i\)。最小化重物间的最大......
  • [ARC105D] Let's Play Nim 题解
    题意给定\(N\)个背包,其中第\(i\)个背包中有\(a_i\)个石子。同时还有\(N\)个盘子,初始时盘子中没有石子。两人轮流执行下列操作:若存在背包中还有石子,选择一个非空背包和盘子,将背包中的石子放入盘子中,注意这里对盘子没有要求;若不存在背包中还有石子,选择一个非空盘子,将盘......
  • 题解 LOJ3483【[USACO21FEB] Counting Graphs P】
    题解P7418【[USACO21FEB]CountingGraphsP】problemBessie有一个连通无向图\(G\)。\(G\)有\(N\)个编号为\(1\ldotsN\)的结点,以及\(M\)条边(\(1\leN\le10^2,N-1\leM\le\frac{N^2+N}{2}\))。\(G\)有可能包含自环(一个结点连到自身的边),但不包含重边(连接同一对结点......
  • Daleks' Invasion 题解
    Daleks'Invasion题目大意给定一张无向带权图,对于每条边求一个最大的\(x\),使得将这条边的边权修改为\(x\)后这条边能位于这张图的最小生成树上。思路分析没事干了就把之前写过的题拉出来水题解。我们先把原图的最小生成树求出来,考虑每条边\((u,v)\),分类讨论:如果这条边......
  • Groceries in Meteor Town 题解
    GroceriesinMeteorTown题目大意维护一颗带权树,支持以下操作:将\([l,r]\)内的点变为白色。将\([l,r]\)内的点变为黑色。查询点\(x\)到任意一个白色节点的简单路径上的最大值。思路分析没事干了把以前的题拿出来写题解。看到『简单路径上的最大值』的字样首......
  • Harvester 题解
    Harvester题目大意给定\(n\timesm\)的网格,每次可以选一行或一列,将这一行或一列上的数全部取走,最多可以取四次,问取走的数的和的最大值。思路分析没事干了把以前写过的题拿出来写题解。分类讨论题。在只能取四次的情况下一共只有这么几种可能:选四行:毫无疑问,行之间互不......
  • 大文件上传 问题解决三种方案
    最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现。在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表格数据、上传影音文件等。如果文件体积比较大,或者网络条件不好时,上传的时间会......
  • P3202 [HNOI2009] 通往城堡之路
    考虑将每个支撑点都先设成其下限高度,即\(h_i\getsh_1-(i-1)\timesd\),这样就只会提高某些支撑点的高度。显然每次提高的是一个后缀。提高某个后缀的贡献是当前高度低于原先高度的支撑点数量减去当前高度不低于原先高度的支撑点数量。选择贡献最大的后缀直到最后一个支撑点的高......