首页 > 其他分享 >HT-018 Div3 能量消耗 题解 [ 绿 ] [ 线性 dp ] [ 前缀和优化 ]

HT-018 Div3 能量消耗 题解 [ 绿 ] [ 线性 dp ] [ 前缀和优化 ]

时间:2024-08-01 22:54:56浏览次数:10  
标签:前缀 int 题解 cin HT 018 1005 优化 dp

能量消耗:一个前缀和优化 dp 的大典题,要是数据水一点 \(O(n^3)\) 都能硬草过去。

思路

显然,定义 \(dp[i]\) 为考虑前 \(i\) 个塔,并且将前面的精灵全部收集的最小代价。

于是转移:

\[dp[i]=min(dp[i],dp[j]+w(j,i)+c[i]) \]

其中 \(0\le j<i \le m\) ,\(w(j,i)\) 表示收集从塔 \(j\) 到 \(i\) 的所有精灵到塔 \(i\) 所花费的代价。

总体复杂度 \(O(n^3)\) ,\(1000\) 数据卡的有点紧,我们尝试优化。

前缀和优化

对于 \(w(j,i)\) ,发现它可以由 \(w(j,i-1)\) 和他们之间的精灵计算得来。

于是我们枚举每一个起点 \(j\) ,后面扫一遍所有塔确定 \(i\) ,顺带用一个指针维护。

这题恶心之处就在于这个指针的边界特判。

\(O(n^2)\) 计算完 \(w(j,i)\) 后, dp 复杂度就降为 \(O(n^2)\) 了,可以过。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pi;
ll a[1005],b[1005],c[1005],n,m,w[1005][1005],lst[1005],dp[1005];
int main()
{
	freopen("energy.in","r",stdin);
	freopen("energy.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	cin>>m;
	for(int i=1;i<=m;i++)cin>>b[i];
	for(int i=1;i<=m;i++)cin>>c[i];
	lst[0]=0;
	for(int i=1;i<=m;i++)
	{
		for(int j=n;j>=1;j--)
		{
			if(a[j]<=b[i])
			{
				lst[i]=j;
				break;
			}
		}
	}
	b[0]=-0x3f3f3f3f;
	for(int i=0;i<m;i++)
	{
		ll now=0,sm=0,p=lst[i]+1,lpos=0;
		for(int j=i+1;j<=m;j++)
		{
			while(p<=lst[j])
			{
				sm+=now*(a[p]-lpos);
				now++;
				lpos=a[p];
				p++;
			}
			sm+=now*(b[j]-lpos);
			lpos=b[j];
			w[i][j]=sm;
		}
	}
	memset(dp,0x3f,sizeof(dp));
	dp[0]=0;
	for(int i=1;i<=m;i++)
	{
		for(int j=0;j<i;j++)
		{
			dp[i]=min(dp[i],dp[j]+w[j][i]+c[i]);
		}
	}
	cout<<dp[m];
	return 0;
}

标签:前缀,int,题解,cin,HT,018,1005,优化,dp
From: https://www.cnblogs.com/zhr0102/p/18337752

相关文章

  • JavaWeb(10) HTTP协议
    一、HTTP协议1.定义        HTTP超文本传输协议(HTTP-HyperTexttransferprotocol),是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过十几年的使用与发展,得到不断地完善和扩展。它是一种详细规定了浏览器......
  • CF1987C Basil's Garden 题解
    CF1987CBasil'sGarden题解壹·题目描述有$n$个数字排成一排,接下来每隔一秒进行一次操作:如果$i=n$或$h_i>h_{i+1}$,则第$i$盆花的高度$h_i$将变为$\max(0,h_i-1)$。请问至少经过多少秒后,所有的数字都为$0$。贰·思路分析可以知道,$h_i\leq1$时$h_i←0$。显然可......
  • tpmtool 描述:     此实用程序可用于获取有关受信任的平台模块(TPM)的信息。    
     tpmtool|MicrosoftLearntpmtool描述:  此实用程序可用于获取有关受信任的平台模块(TPM)的信息。  有关最新文档,请转到https://aka.ms/tpmtool语法:  tpmtool[parameter][<参数>]参数:  GETDEVICEINFORMATION          显示......
  • [题解]P6927 [ICPC2016 WF] Swap Space
    思路显然要按\(a_i,b_i\)的大小关系分类:\(a_i<b_i\):假令有两对数\((a_1,b_1),(a_2,b_2)\),且\(a_1\leqa_2\)。如果\(b_1\geqa_2\)。则按照12的顺序,将带来\(a_1\)的花费,以及\(b_1+b_2\)的额外空间;而按照21的顺序,将带来\(a_2\)的花费,以及\(b_1+b_2......
  • CF553E Kyoya and Train 题解
    Description给定一张\(n\)个点\(m\)条边的无重边无自环的有向图,你要从\(1\)号点到\(n\)号点去。如果你在\(t\)时刻之后到达\(n\)号点,你要交\(x\)元的罚款。每条边从\(a_i\)到\(b_i\),走过它需要花费\(c_i\)元,多次走过同一条边需要多次花费。走过每条边所需......
  • 【问题解决方案】npm install报错问题:npm ERR! - 多种解决方案,总有一种可以解决
    @[toc]1.问题重述安装package.json里面的包,使用npminstall但是报错2.解决方案方案1.确认根目录正确确认自己的目录是根目录(也就是处于./package.json可以找到的位置)例如--根目录----package.json----其他文件----其他文件方案2.确认文件名正确确认自己的pack......
  • P9308 「DTOI-5」#1f1e33 题解
    声明:截止\(2024.8.1\),拿下洛谷最优解最短解,代码长度不到1k。复杂度\(O(n\log\logn)\)。先骂:官方题解菜!这种纯洁的数论题居然敢引入NTT作为标算,说明出题人不会推式子。还有题解区一车\(\log\)的题解凭啥顶那么上面,推的一坨狗屎推出来的复杂度还不优秀。说明:下面除法默......
  • 2024牛客暑期多校训练营6 A.cake(题解)
    A.Cake题意两个人玩游戏,游戏分两阶段第一阶段在一棵有根树上轮流走,走到叶子停止,有根树边上有01标记,记录下走过的01串第二阶段分蛋糕,Oscar按自己的意愿切蛋糕,然后按照第一阶段获得的01串顺序依次拿蛋糕(1代表Grammy拿,0代表Oscar拿)两人都想让自己获得尽量多的蛋糕,......
  • CF1997F Chips on a Line 题解
    注意到操作是可逆的,可以先把所有筹码移动到位置\(1\),再进行若干次操作使筹码数量最小化。那么我们只需要对每一个\(i\)知道有多少种情况把筹码全移动到位置\(1\)后恰好有\(i\)个筹码,和这类情况的最少筹码数。记\(f_i\)表示斐波那契数列的第\(i\)项,显然一个位置\(i\)......
  • 14.前端html
    html一、基本介绍1、定义:html是一种超文本标记语言,也是一种标识性语言(不是编程语言)标记:记号(绰号)超文本:就是页面内容可以包含图片、链接,音乐,视频等素材。2、为什么学习html?(1)测试页面元素,了解页面页面元素(页面是html语言编写的)(2)进行ui自动化需用到元素定位3、html有哪些特......