转化题意

这题目乍一看十分玄学,完全不可做。

但实际上,假设我们在原序列从小到大排序之后,选择开的宝箱编号是\(p_{1\sim Z}\),则最终答案就是:

\[\sum_{i=1}^Za_{p_i}(p_{i+1}-p_i)
\]

其中\(p_{Z+1}=n+1\)。

有了这个式子,就可做了许多。

暴力\(DP\)

我们设\(f_{i,j}\)为在前\(i\)个宝箱中选择了\(j\)个宝箱的最小代价。

枚举一个转移点\(k\)表示上个选择的宝箱,就可以得到:

\[f_{i,j}=f_{k,j-1}+(a_k-a_i)(n-i+1)
\]

这虽然是\(O(n^3)\)的,但\(n\)才\(1000\),加上其常数很小,实际实现中又可以将枚举时除以个\(8\),所以能跑过。

斜率优化

比赛时调了一个多小时没调出来。。。加上暴力\(DP\)能过,就没再想了。。。

这里先占个坑吧。

代码(暴力\(DP\))

#include<bits/stdc++.h>
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
#define Reg register
#define RI Reg int
#define Con const
#define CI Con int&
#define I inline
#define W while
#define N 1000
#define INF 2e9
#define LL long long
#define min(x,y) ((x)<(y)?(x):(y))
#define Gmin(x,y) (x>(y)&&(x=(y)))
using namespace std;
int n,m,a[N+5];
class BruteForceSolver
{
private:
int f[N+5][N+5];
public:
I void Solve()
{
RI i,j,k;for(i=0;i<=n;++i) for(j=0;j<=m;++j) f[i][j]=INF;//初始化
for(f[0][0]=0,j=1;j<=m;++j) for(i=j;i<=n;++i)//枚举i,j
for(k=j-1;k^i;++k) Gmin(f[i][j],f[k][j-1]+1LL*(a[i]-a[k])*(n-i+1));//枚举转移点k进行转移
RI ans=INF;for(i=0;i<=n;++i) Gmin(ans,f[i][m]);printf("%d",ans);//求答案
}
}B;
int main()
{
freopen("chest.in","r",stdin),freopen("chest.out","w",stdout);
RI i;for(scanf("%d%d",&n,&m),i=1;i<=n;++i) scanf("%d",a+i);sort(a+1,a+n+1);//注意排序
return B.Solve(),0;
}

最新文章

  1. UWP中实现自定义标题栏
  2. kettle中变量的设置和使用介绍
  3. svn 更新命令(冲突时使用theirs)
  4. C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
  5. LCA(RMQ)
  6. centos防火墙设置
  7. poj 3237 Tree
  8. Silverlight Visifire控件 .net后台控制aspx页面控件的显示与隐藏,动态给控件赋值,选定默认值的设定
  9. 基于java自身技术实现消息方式的系统间通信
  10. ACM-ICPC2018南京赛区 Mediocre String Problem
  11. Django Cookie和Seesion
  12. 【Mybatis】MyBatis调用带有返回结果、output参数的存储过程上与ibatis的区别
  13. 完成将 toChineseNum, 可以将数字转换成中文大写的表示,处理到万级别,例如 toChineseNum(12345),返回 一万二千三百四十五
  14. 冲刺Two之站立会议1
  15. Go 源码学习之--net/http
  16. [javaSE] 网络编程(TCP,UDP,Socket特点)
  17. 【BZOJ】3674: 可持久化并查集加强版
  18. Python3实现机器学习经典算法(二)KNN实现简单OCR
  19. HDU 5793 A Boring Question (找规律 : 快速幂+乘法逆元)
  20. MVC涉及RouteTable自定义路径

热门文章

  1. PUT和POST区别
  2. Note | 常用指令,工具,教程和经验笔记
  3. saltstack--史上最细致安装攻略!亲测无坑
  4. es6模板字符串使用使${} 来包裹一个变量或者一个表达式
  5. JVM基础详解
  6. Flink on YARN时,如何确定TaskManager数
  7. eclipse彻底去除validation(彻底解决编辑js文件的卡顿问题)
  8. C#上手练习7(方法语句2)
  9. c#中xml增删查改
  10. PHP+Ajax手机移动端发红包实例