首页 > 其他分享 >CF559E Gerald and Path(DP)

CF559E Gerald and Path(DP)

时间:2022-08-14 17:56:47浏览次数:80  
标签:int CF559E 线段 pos len Seg DP Path dp

CF559E Gerald and Path

设 \(dp(i,p)\) 表示完成前 \(i\) 条线段的覆盖,最右端位于 \(p\) 点的最大收益。

转移?向下一条线段转移时加上他们中间的距离?发现这样没有办法统计 \(p\) 点以前的空位了!

\(\color{yellow}{\bigstar\texttt{Trick}}\):如果出现上面没有办法统计 \(p\) 点以前的空位的情况,说明覆盖 \(p\) 点的这条线段是没有用的,每次只需要考虑有用的线段

若要枚举有用的线段,从 \(i\) 点枚举下一个有用的线段 \(k\),钦定 \([i+1,k-1]\) 之间的线段都是没有用的,这样就可以像上面一样转移了。

但是,如果没有用的线段中出现一个线段它的右端点超过了 \(k\) 线段的右端点呢?那就再扫过 \([i+1,k-1]\) 线段的时候统计下最右边端,再加上它与 \(k\) 线段右端的贡献即可。

实现的时候记 \(p\) 点只用记录最右端线段编号和朝向即可,设 \(dp(i,j,p)\) 表示到 \(i\) 线段为止,最右边的线段是 \(j\),它的朝向为 \(p\) 的最大收益。

\[dp(k,x,y)\leftarrow dp(i,j,p)+\min(r_k-p,len_k)+r_x-r_k \]

#define Maxn 105
int n,ans;
int dp[Maxn][Maxn][2];
struct Seg
{
	int pos,len;
	Seg(int Pos=0,int Len=0):pos(Pos),len(Len){}
	inline bool friend operator < (Seg x,Seg y) { return x.pos<y.pos; }
}s[Maxn];
int main()
{
	n=rd();
	for(int i=1,p,l;i<=n;i++) p=rd(),l=rd(),s[i]=Seg(p,l);
	sort(s+1,s+n+1),s[0].pos=-inf;
	for(int i=0;i<=n;i++)
		for(int j=0;j<=i;j++) for(int p=0;p<2;p++)
		{
			int rn=s[j].pos+p*s[j].len,maxx=-inf,pos=-1,d;
			ans=max(ans,dp[i][j][p]);
			for(int k=i+1;k<=n;k++) for(int q=0;q<2;q++)
			{
				int cur=s[k].pos+q*s[k].len;
				if(cur>=maxx) maxx=cur,pos=k,d=q;
				dp[k][pos][d]=max(dp[k][pos][d],
					dp[i][j][p]+min(cur-rn,s[k].len)+maxx-cur);
			}
		}
	printf("%d\n",ans);
	return 0;
}

标签:int,CF559E,线段,pos,len,Seg,DP,Path,dp
From: https://www.cnblogs.com/EricQian/p/16585902.html

相关文章

  • CF856D Masha and Cactus(树上 DP+抵消贡献技巧)
    CF856DMashaandCactus我们先捞出一个根节点,那么一次旋变就是对路径上点的覆盖。设\(dp_{i,0}\)表示\(i\)没有选择时子树内最大收益,\(dp_{i,1}\)表示\(i\)选择......
  • CF512D Fox And Travelling(DP 计数)
    CF512DFoxAndTravelling给定一张\(n\)个点\(m\)条边的无向图,每次选择一个叶子结点并将它和连接它的边删除。对于每个\(k\in[0,n]\),问有序选择\(k\)个点的方案......
  • 【杂题乱写】AtCoder dp 26题
    AtCoderdp26题原比赛链接洛谷题单链接A-Frog1题目已然给出了转移方程,设\(dp_i\)为到第\(i\)块石头的最小代价。转移方程:\[dp_i=\min(dp_{i-1}+|h_i-h_{i-1}......
  • 【$dp$】$\text{LuoguP6570}$ 优秀子序列
    \(\text{LuoguP6570}\)优秀子序列读完题大概能yy到一个转移,即枚举两个不相交的子集然后转移。其实这题的顺序都无所谓,应该排个序,或者直接在值域上操作。\(DP\),用\(f......
  • 爬虫数据分析-Xpath
    1.环境安装:-pipinstalllxml2.如何实例化一个etree对象:fromlxmlimportetree(1)将本地的html文档中的源码数据加载到etree对象中:etree.parse(filePath)(2)可......
  • 数位Dp
    代码拍卖会题意问有[L-R]有多少个数满足每一位都至少有1,从左到右不减同时要能被P整除,位数<=\(1e18\).p<=500)思路位数贼大,基本上别想着枚举有关位数的东西单调......
  • dp 学习笔记
    一.前言动态规划是一种通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。其思想灵活多变,在OI中占有重要地位,必须掌握熟练。二背包问题背包问题都类......
  • 解决 MAUI 在mac上编译提示 The path 'XXXXXXX\Shared\MainLayout.razor.css' would
    路径'XXXXXXX\Shared\MainLayout.razor.css'将导致应用程序包之外的文件并且无法使用DescriptionTheerrorhappenswithBlazorMAUIHybridProject.Projectcompil......