dp求优化
查看原帖
dp求优化
482610
Mortidesperatslav楼主2023/10/8 20:38
#include<bits/stdc++.h>
using namespace std;
int f[2][50001][2],a[100001],s[100001],n,kk;
int mmin(int a,int b){
	if(a==-1)return b;
	else if(b==-1)return a;
	else return min(a,b);
}
int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>n>>kk;
	for(register int i=1;i<=n;i++)cin>>a[i];
	for(register int i=1;i<n;i++)s[i]=a[i+1]-a[i];
	memset(f,-1,sizeof(f));
	f[0][0][0]=f[1][0][0]=0;
	for(register int i=2;i<=n;i++){
		for(register int k=1;k<=kk;k++){
			if(f[(i-1+2)&1][k-1][0]!=-1)f[i&1][k][1]=f[(i-1+2)&1][k-1][0]+s[i-1];
			if(f[(i-1+2)&1][k][1]==-1)f[i&1][k][0]=f[(i-1+2)&1][k][0];
			else if(f[(i-1+2)&1][k][0]==-1)f[i&1][k][0]=f[(i-1+2)&1][k][1];
			else f[i&1][k][0]=min(f[(i-1+2)&1][k][0],f[(i-1+2)&1][k][1]);
		}
	}
	cout<<mmin(f[n&1][kk][0],f[n&1][kk][1]);
}

怎么进行一些优化 qwq

2023/10/8 20:38
加载中...