CF13C. Sequence
题目描述
解题思路
最小花费
的目标序列,必定是由原先序列
的数字构成的。
推导
成员不变
构成的新序列看成是由原先的序列经过一系列的交换
操作后得到的,而成员不同
的新序列是由原先的序列经过一系列的交换
然后再加减
得到的,那么我们不做额外的加减操作,花费肯定是比额外的要小的,因此我们只需要从原序列上考虑
就行了
状态表示
DP边界
转移方程
我们可以将一个情况分成两类:
以上两种取
代码
#include <iostream>
#include <algorithm>
#include <cstring>
#define int long long
using namespace std;
const int N = 5e4 + 10;
int f[2][N], n, a[N], c[N];
signed main()
{
scanf("%lld", &n);
for (int i = 1; i <= n; i ++ )
scanf("%lld", &a[i]), c[i] = a[i];
sort(c + 1, c + 1 + n);
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 ++ )
f[1][j] = min(f[1][j - 1], f[0][j] + abs(c[j] - a[i]));
swap(f[0], f[1]);
}
int res = 1e18;
for (int i = 1; i <= n; i ++ )
res = min(res, f[0][i]);
printf("%lld\n", res);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)