1 条题解

  • 0
    @ 2025-6-24 8:32:13

    暴力dp

    设 f[i][j] 表示 考虑前 i 台设备,第 i 台设备参数为 j 的最小代价

    则 ans=min(f[n][j])

    for i
    for j
    for k
    
    f[i][j]=(j-a[i])^2 + min(f[i-1][k]+abs(j-k)*c)
    

    复杂度 O(n * 100^2)

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    const int N=1e5+5, INF=0x3f3f3f3f;
    int n,c,a[N],f[N][105];
    signed main()
    {
    //	freopen("ex.in","r",stdin);
    //	freopen("ex.out","w",stdout);
    	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    	cin>>n>>c;
    	int mx=0;
    	for(int i=1;i<=n;i++)
    	{
    		cin>>a[i];
    		mx=max(mx,a[i]);
    	}
    	
    	memset(f,0x3f,sizeof f);
    	
    	for(int j=a[1];j<=mx;j++)f[1][j]=(j-a[1])*(j-a[1]);
    	
    	for(int i=2;i<=n;i++) 
    	{
    		for(int j=a[i];j<=mx;j++)
    		{
    			for(int k=a[i-1];k<=mx;k++)
    			{
    				f[i][j]=min(f[i][j], (j-a[i])*(j-a[i]) + f[i-1][k] + abs(j-k)*c );
    			}
    		}
    	}
    	
    	int ans=INF;
    	for(int i=0;i<=mx;i++)
    	{
    		ans=min(ans,f[n][i]);
    	}
    	cout<<ans;
    	return 0;
    }
    
    • 1

    信息

    ID
    287
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    (无)
    递交数
    54
    已通过
    15
    上传者