Description

有 n 道菜品被放入了一个烤炉中,每到菜品都有一个最佳取出的时间 \(t_i\)。现在按照一定顺序把菜品从烤炉中取出,每到菜品都有可能因为不在最佳时间被取出而造成不美味,定义这个不美味度为 \(|T-t_i|\),其中 T 是取出的时刻。求把所有菜品都取出来的最小不美味度。\(n \le 200\)

Solution

考虑到取出所有菜品的顺序一定与他们完成的时间先后顺序相同,设 \(f[i][j]\) 表示到了时刻 \(i\) 取出了前 \(j\) 个菜品,那么很显然有转移 \(f[i][j]=\min (f[i-1][j],f[i-1][j-1]+|i-t[j]|)\),可以压掉一维倒序转移。

#include <bits/stdc++.h>
using namespace std;

#define int long long 
const int N = 1005;

int n,t[N],f[N],tmax;

signed main()
{
    int _;
    cin>>_;
    while(_--)
    {
        cin>>n;
        for(int i=1;i<=n;i++) cin>>t[i];
        sort(t+1,t+n+1);
        memset(f,0x3f,sizeof f);
        f[0]=0;
        for(int i=1;i<N;i++)
        {
            for(int j=n;j>=1;j--)
            {
                f[j]=min(f[j],f[j-1]+abs(i-t[j]));
            }
        }
        cout<<f[n]<<endl;
    }
}

相关文章:

  • 2022-02-06
  • 2021-07-10
  • 2022-12-23
  • 2021-11-25
  • 2021-06-18
  • 2022-12-23
  • 2022-12-23
  • 2021-10-30
猜你喜欢
  • 2022-12-23
  • 2021-06-20
  • 2021-10-18
  • 2021-07-02
  • 2021-06-14
  • 2022-12-23
  • 2021-11-25
相关资源
相似解决方案