建议加强数据
查看原帖
建议加强数据
795784
zxh923楼主2024/12/10 20:12

写了一个特别错的转移方程(这里暂时忽略复杂度),过了所有能跑的动的点。想问下这个到底是数据水了还是有什么性质没有发现?

代码:

#include<bits/stdc++.h> 
#define int long long
#define N 2005
#define pii pair<int,int>
#define x first
#define y second
#define pct __builtin_popcount
#define mod 7
#define pi acos(-1)
#define inf 2e18
#define eps 1e-8
using namespace std;
int T=1,n,a[N],b[N],f[N][N];
void solve(int cs){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		b[i]=a[i];
	}
	sort(b+1,b+n+1);
	memset(f,0x3f,sizeof f);
	for(int i=1;i<=n;i++){
		f[0][i]=0;
	}
	int res=inf;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			for(int k=1;k<=j;k++){
				f[i][j]=min(f[i][j],f[i-1][k]+abs(b[k]-a[i]));
			}
		}
	}
	for(int i=1;i<=n;i++){
		res=min(res,f[n][i]);
	}
	reverse(a+1,a+n+1);
	memset(f,0x3f,sizeof f);
	for(int i=1;i<=n;i++){
		f[0][i]=0;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			for(int k=1;k<=j;k++){
				f[i][j]=min(f[i][j],f[i-1][k]+abs(b[k]-a[i]));
			}
		}
	}
	for(int i=1;i<=n;i++){
		res=min(res,f[n][i]);
	}
	cout<<res<<'\n';
}
void solution(){
    /*
    nothing here
    */
}
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
//  init();
//  cin>>T;
    for(int cs=1;cs<=T;cs++){
        solve(cs);
    }
    return 0; 
}
2024/12/10 20:12
加载中...