CodeForces - 1437C(dp)

90nwyn

2020-11-21 20:42:50

Personal

[题目链接](https://vjudge.net/problem/CodeForces-1437C) ------------ 考虑到取出所有菜品的顺序一定与他们完成的时间先后顺序相同,设 $f[i][j]$ 表示到了时刻 $i$ 取出了前 $j$ 个菜品 ------------ ```cpp #include <bits/stdc++.h> using namespace std; typedef long long ll; const int M=2e2+5,inf=0x3f3f3f3f; int n,a[M],dp[M]; int main() { int Q;scanf("%d",&Q); while(Q--) { scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&a[i]); sort(a+1,a+1+n); dp[0]=0; for(int j=1;j<=n;j++)dp[j]=inf; for(int i=1;i<=2*n;i++) for(int j=n;j>=1;j--) dp[j]=min(dp[j],dp[j-1]+abs(a[j]-i)); printf("%d\n",dp[n]); } return 0; } ```