求助,爆零
查看原帖
求助,爆零
422996
HeCao2008楼主2022/7/3 08:34
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int a[501];
ll f[501][201];
int n,m;
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)cin>>a[i];
	sort(a+1,a+n+1);
	memset(f,0x3f,sizeof(f));
	for(int i=0;i<m*2;i++)f[1][i]=i;
	for(int i=1;i<n;i++){
		for(int j=0;j<m*2;j++){
			if(f[i][j]<0x3f3f3f3f3f3f3f3f){
				if(a[i]+j>=a[i+1])f[i+1][a[i]+j-a[i+1]]=min(f[i+1][a[i]+j-a[i+1]],f[i][j]+a[i]+j-a[i+1]);
		        for(int k=a[i]+j+m>=a[i]+1?0:a[i+1]-(a[i]+j)-m;a[i]+j+m+k-a[i+1]<2*m;k++){
		    	    if(a[i]+j+m+k>=a[i+1])f[i+1][a[i]+j+m+k-a[i+1]]=max(f[i+1][a[i]+j+m+k-a[i+1]],f[i][j]+a[i]+j+m+k-a[i+1]);
			    }
			    if(a[i]+j+m<a[i+1])for(int k=0;k<m*2;k++)f[i+1][k]=min(f[i+1][k],f[i][j]+k);
			}
		}
	}
	ll ans=0x3f3f3f3f3f3f3f3f;
	for(int i=0;i<m*2;i++)ans=min(ans,f[n][i]);
	cout<<ans<<endl;
	return 0;
}
2022/7/3 08:34
加载中...