2 条题解

  • 0
    @ 2025-10-8 16:56:35
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const int N=2100;
    LL f[N][N];//f[i][j]表示B[i]=b[j]的情况下,∑|A[1..i]-B[1..i]|最小值 
    LL a[N],b[N];
    int main()
    {
        int n;scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%lld",&a[i]),b[i]=a[i];
        sort(b+1,b+n+1);
        memset(f[0],0,sizeof(f[0]));
        for(int i=1;i<=n;i++)
        {
            LL val=1ll<<60; 
            for(int j=1;j<=n;j++)
            {
                val=min(val,f[i-1][j]);
                f[i][j]=val+abs(a[i]-b[j]);
            }
        }
        LL ans=1ll<<60;;
        for(int j=1;j<=n;j++)ans=min(ans,f[n][j]);
        memset(f,0,sizeof(f));
        for(int i=1;i<=n;i++)
        {
            LL val=1ll<<60; 
            for(int j=1;j<=n;j++)
            {
                val=min(val,f[i-1][j]);
                f[i][j]=val+abs(a[i]-b[n-j+1]);
            }
        }
        for(int j=1;j<=n;j++)ans=min(ans,f[n][j]);
        
        printf("%lld\n",ans);
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:56:26
      #include<bits/stdc++.h>
      using namespace std;
      typedef long long LL;
      const int N=2100;
      LL f[N][N];//f[i][j]表示B[i]=b[j]的情况下,∑|A[1..i]-B[1..i]|最小值 
      LL a[N],b[N];
      int main()
      {
      	int n;scanf("%d",&n);
      	for(int i=1;i<=n;i++)scanf("%lld",&a[i]),b[i]=a[i];
      	sort(b+1,b+n+1);
      	memset(f[0],0,sizeof(f[0]));
      	for(int i=1;i<=n;i++)
      	{
      		LL val=1ll<<60; 
      		for(int j=1;j<=n;j++)
      		{
      			val=min(val,f[i-1][j]);
      			f[i][j]=val+abs(a[i]-b[j]);
      		}
      	}
      	LL ans=1ll<<60;;
      	for(int j=1;j<=n;j++)ans=min(ans,f[n][j]);
      	memset(f,0,sizeof(f));
      	for(int i=1;i<=n;i++)
      	{
      		LL val=1ll<<60; 
      		for(int j=1;j<=n;j++)
      		{
      			val=min(val,f[i-1][j]);
      			f[i][j]=val+abs(a[i]-b[n-j+1]);
      		}
      	}
      	for(int j=1;j<=n;j++)ans=min(ans,f[n][j]);
      	
      	printf("%lld\n",ans);
      	return 0;
      }
      
      • 1

      *【动态规划:区间二维一边推】改造道路海拔[USACO08FEB] Making the Grade G

      信息

      ID
      1360
      时间
      1000ms
      内存
      64MiB
      难度
      7
      标签
      递交数
      111
      已通过
      26
      上传者