10pts
查看原帖
10pts
1349424
Charlie_Nine楼主2025/7/31 18:21
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e3+10,INF=0x3f3f3f;
inline int read(){
	int x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
int p,q,dp[N][N],poi[N];
int main(){
	//freopen("prison.in","r",stdin);
	//freopen("prison.out","w",stdout);
	p=read(),q=read();
	for(int i=1;i<=q;i++){
		poi[i]=read();
	}
	sort(poi+1,poi+q+1);
	poi[0]=0,poi[q+1]=p+1;
	for(int k=1;k<=q;k++){
		for(int i=1;i+k-1<=q;i++){
			int j=i+k-1;
			dp[i][j]=999999999;
			for(int p=i;p<=j;p++){
				dp[i][j]=min(dp[i][j],dp[i][k-1]+dp[k+1][j]+poi[j+1]-poi[i-1]-1-1);
			}
		}
	}
	cout<<dp[1][q];
	return 0;
}

2025/7/31 18:21
加载中...