线性dp-综合刷题1(Not Alone)

题目链接

环形数组优美可以有两种方式:一种是前面i-2个数可以组成优美的环形数组,让第i个和第i-2个数变相同;还有一种是前面i-3个数可以组成优美的环形数组,让第i-2个、第i-1个和第i个数变相同。

那要变相同的数怎么加减次数最少呢?往他们中位数的方向去变。记录最大值maxx和最小值minn,最少的加减次数为maxx-minn。

AC代码:

cpp 复制代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=400005;
int t,n,dp[maxn],a[maxn],ans;
signed main(){
	cin>>t;
	while(t--){
		cin>>n;
		ans=1e18;
		for(int i=1;i<=n;i++) {
	 		cin>>a[i];
			a[i+n]=a[i];	
		}
		for(int i=0;i<3;i++){
			for(int j=1;j<=n*2;j++) dp[j]=1e18;
			dp[i]=0;
			for(int j=i+1;j<=i+n;j++){
				if(j>=2) dp[j]=min(dp[j],dp[j-2]+abs(a[j]-a[j-1]));
				if(j>=3){
					int maxx=0,minn=1e18;
					for(int k=j-2;k<=j;k++){
						maxx=max(maxx,a[k]);
						minn=min(minn,a[k]);
					}
					dp[j]=min(dp[j],dp[j-3]+maxx-minn);
				}
			}
			ans=min(ans,dp[n+i]);
		}
		cout<<ans<<endl;
	}
	return 0;
} 
相关推荐
罗西的思考10 小时前
机器人 / 强化学习】HIL-SERL:人类在环驱动的具身智能进化框架
人工智能·算法·机器学习
美团技术团队13 小时前
LongCat 开源 VitaBench 2.0:长期动态智能体基准新标杆
人工智能·算法
To_OC1 天前
LC 207 课程表:刚学图论那会儿,我连这是拓扑排序都没看出来
javascript·算法·leetcode
To_OC1 天前
LC 208 实现 Trie 前缀树:曾被名字劝退,写完发现是送分题
javascript·算法·leetcode
BadBadBad__AK1 天前
线段树维护区间 k 次方和
c++·数学·算法·stl
_清歌2 天前
DSpark 深度解读:DeepSeek-V4 如何用「半自回归」把推理速度提升 85%
算法
统计实现局2 天前
SVD 的三步走:双对角化、Givens 收敛、排序
算法
躬行见万象2 天前
《VLA 系列》UniLab 强化训练 | G1 机器人 |复现
算法
统计实现局2 天前
对称不定分解(Bunch-Kaufman):为什么 Cholesky 不够用
算法