CF704B Ant Man 题解

题目传送门

前置知识

预设性 DP

解法

考虑统计每个数单独的贡献,然后进行预设性 DP。

fi,j 表示当前填了 [1,i] 时有 j 个连续段的最小权值,边界为 f0,0=0

i(is,ie) 填入的位置进行分讨。

  • 新开一段
    • 后面填入的数都比 i 大(如果存在后面填入的数的话,即 j>[i>s]+[i>t]),故 fi,j=min(fi,j,fi1,j12xi+bi+di)
  • 连接到某个连续段的前后
    • 连接到某个连续段的前面(如果可以在前面的话,即 j>[i>s])时,后面填入的数(在 i 左面)比 i 大,而 i 右面的数比 i 小,故 fi,j=min(fi,j,fi1,j+bi+ci)
    • 连接到某个连续段的后面(如果可以在后面的话,即 j>[i>t])时,后面填入的数(在 i 右面)比 i 大,而 i 左面的数比 i 小,故 fi,j=min(fi,j,fi1,j+ai+di)
  • 连接两个连续段
    • i 比旁边的两个数都要大,故 fi,j=min(fi,j,fi1,j+1+2xi+ai+ci)

i=s 时只可能放到首端,可行的转移操作只有新开一段和连接到某个连续段的前面且前面不会再有数填,故 fi,j=min(fi1,j1xi+di,fi1,j+xi+ci);当 i=e 时只可能放到末端,可行的转移操作只有新开一段和连接到某个连续段的后面且后面不会再有数填,故 fi,j=min(fi1,j1xi+bi,fi1,j+xi+ai)

最终有 fn,1 即为所求。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
#define ull unsigned long long
#define sort stable_sort 
#define endl '\n'
ll f[5010][5010],x[5010],a[5010],b[5010],c[5010],d[5010];
int main()
{
	ll n,s,e,i,j;
	cin>>n>>s>>e;
	for(i=1;i<=n;i++)
	{
		cin>>x[i];
	}
	for(i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	for(i=1;i<=n;i++)
	{
		cin>>b[i];
	}
	for(i=1;i<=n;i++)
	{
		cin>>c[i];
	}
	for(i=1;i<=n;i++)
	{
		cin>>d[i];
	}
	memset(f,0x3f,sizeof(f));
	f[0][0]=0;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=i;j++)
		{
			if(i==s)
			{
				f[i][j]=min(f[i][j],f[i-1][j-1]-x[i]+d[i]);
				f[i][j]=min(f[i][j],f[i-1][j]+x[i]+c[i]);
			}
			else
			{
				if(i==e)
				{
					f[i][j]=min(f[i][j],f[i-1][j-1]-x[i]+b[i]);
					f[i][j]=min(f[i][j],f[i-1][j]+x[i]+a[i]);
				}
				else
				{
					if(j>(i>s)+(i>e))
					{
						f[i][j]=min(f[i][j],f[i-1][j-1]-2*x[i]+b[i]+d[i]);
					}
					if(j>(i>s))
					{
						f[i][j]=min(f[i][j],f[i-1][j]+b[i]+c[i]);
					}
					if(j>(i>e))
					{
						f[i][j]=min(f[i][j],f[i-1][j]+a[i]+d[i]);
					}
					f[i][j]=min(f[i][j],f[i-1][j+1]+2*x[i]+a[i]+c[i]);
				}
			}
		}
	}
	cout<<f[n][1]<<endl;
	return 0;
}
posted @   hzoi_Shadow  阅读(20)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
扩大
缩小
点击右上角即可分享
微信分享提示