这题是一道区间DP

思维难度主要集中在如何预处理距离上

由生活经验得,邮局放在中间显然最优

所以我们可以递推求出\( w[i][j] \)表示i,j之间放一个邮局得距离

然后设出状态转移方程

设\( dp[i][j] \)表示从1开始到i放j个邮局的最短距离

然后转移为:\( dp[i][j]=min(dp[k][j-1]+w[k+1][j],dp[i][j]),i \le k \le j \)

显然是个\( O(n^{3}) \)的DP

能够得40分

#include <cstdio>
#include <algorithm>
#include <cstring>
#define int long long
using namespace std;
int w[][],dp[][],n,p,x[];
signed main(){
scanf("%lld %lld",&n,&p);
for(int i=;i<=n;i++)
scanf("%lld",&x[i]);
sort(x+,x+n+);
memset(w,0x3f,sizeof(w));
for(int i=;i<=n;i++)
w[i][i]=;
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
w[i][j]=w[i][j-]+x[j]-x[(i+j)/];
memset(dp,0x3f,sizeof(dp));
for(int i=;i<=n;i++)
dp[i][]=w[][i];
for(int i=;i<=p;i++)
dp[i][i]=;
for(int i=;i<=p;i++)
for(int j=i+;j<=n;j++)
for(int k=i-;k<=j;k++){
dp[j][i]=min(dp[j][i],dp[k][i-]+w[k+][j]);
//5 printf("%d %d %d %d\n",i,j,k,dp[j][i]);
}
/*for(int l=1;l<=n;l++)
for(int i=1;i+l<=n;++)
printf("w[%d][%d]=%d\n",i,i+l,w[i][i+l]);*/
printf("%lld\n",dp[n][p]);
return ;
}

然后就是优化

我们可以发现一些显然的性质

\( w[i^{'}][j] \le w[i][j^{'}] , i \le i^{'} \le j \le j^{'} \)

\( w[i][j]+w[i^{'}][j^{'}] \le w[i^{'}][j]+w[i][j^{'}] \)

然后就可以用四边形不等式优化DP了!

然后QwQ

复杂度\( O(n^{2}) \)

没了

#include <cstdio>
#include <algorithm>
#include <cstring>
#define int long long
using namespace std;
int w[][],dp[][],n,p,x[],s[][];
signed main(){
scanf("%lld %lld",&n,&p);
for(int i=;i<=n;i++)
scanf("%lld",&x[i]);
sort(x+,x+n+);
memset(w,0x3f,sizeof(w));
for(int i=;i<=n;i++)
w[i][i]=;
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
w[i][j]=w[i][j-]+x[j]-x[(i+j)/];
memset(dp,0x3f,sizeof(dp));
for(int i=;i<=n;i++)
dp[i][]=w[][i],s[i][]=;;
for(int i=;i<=p;i++)
dp[i][i]=;
for(int i=;i<=p;i++){
s[n+][i]=n;
for(int j=n;j>=i+;j--)
for(int k=s[j][i-];k<=s[j+][i];k++)
if(dp[j][i]>dp[k][i-]+w[k+][j]){
dp[j][i]=dp[k][i-]+w[k+][j];
s[j][i]=k;
//5 printf("%d %d %d %d\n",i,j,k,dp[j][i]);
}
}
/*for(int l=1;l<=n;l++)
for(int i=1;i+l<=n;++)
printf("w[%d][%d]=%d\n",i,i+l,w[i][i+l]);*/
printf("%lld\n",dp[n][p]);
return ;
}

题解——洛谷P4767 [IOI2000]邮局(区间DP)的更多相关文章

  1. 洛谷P2470 [SCOI2007]压缩(区间dp)

    题意 题目链接 Sol 神仙题Orz 考虑区间dp,如果我们只设\(f[l][r]\)表示\(s_{lr}\)被压缩的最小长度,而不去关心内部\(M\)分布的话,可能在转移的时候转移出非法状态 因此考 ...

  2. 洛谷P1018乘积最大——区间DP

    题目:https://www.luogu.org/problemnew/show/P1018 区间DP+高精,注意初始化和转移的细节. 代码如下: #include<iostream> # ...

  3. 洛谷P1220关路灯——区间DP

    题目:https://www.luogu.org/problemnew/show/P1220 区间DP. 代码如下: #include<iostream> #include<cstd ...

  4. 洛谷P1040 加分二叉树(区间dp)

    P1040 加分二叉树 题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为节点编号.每个节点都有一个分数(均为正整数),记第i个节点的分数为di, ...

  5. 洛谷 P1080 石子合并 ( 区间DP )

    题意 : 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分.试设计出1个算法,计算出将N堆石子合并成1堆 ...

  6. 洛谷$P1864\ [NOI2009]$二叉查找树 区间$dp$

    正解:区间$dp$ 解题报告: 传送门$QwQ$ 首先根据二叉查找树的定义可知,数据确定了,这棵树的中序遍历就已经改变了,唯一能改变的就是通过改变权值从而改变结点的深度. 发现这里权值的值没有意义,所 ...

  7. 洛谷P1063能量项链(区间dp)

    题目描述: 给定一串序列x[],其中的每一个Xi看作看作一颗珠子,每个珠子包含两个参数,head和tail,前一颗的tail值是后一个的head值,珠子呈现环形(是一条项链),所以最后一颗的tail是 ...

  8. 洛谷 P1043 数字游戏 区间DP

    题目描述 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分 ...

  9. 洛谷 P1220 关路灯 区间DP

    题目描述 某一村庄在一条路线上安装了 n 盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了 ...

随机推荐

  1. arc 093 C – Traveling Plan

    题意: 给出横坐标上一系列的点,一个人从0出发按照下标顺序访问每一个点,再回到0点. 问每次如果去掉一个点,那么访问的距离变为多少. 思路: 去掉这个点,那么就减去这个点到上一点到这一点的距离,减去这 ...

  2. HashSet, HashTable

    HashTable 存储键值对 , Hashtable和Dictionary<TKey,TValue>都是存键值对 HashSet 只存储值,盛放不同的数据,相同的数据只保留一份 Hash ...

  3. 什么是ASCII

    以下内容是从百度百科学的 1)ASCII(American Standard Code for Information Interchange:美国信息交换标准代码) 2)产生原因 在计算机中,所有的 ...

  4. 对SQLite 数据库的一点点了解

    SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它的设计目标是嵌入式的,它占用资源非常低,在嵌入式设备中,可能只需要几百k的内存就够了. SQLit ...

  5. Redis入门——安装与基本命令

    1. Redis安装 下载地址:https://github.com/MSOpenTech/redis/releases 下载zip文件后直接解压 2. 启动Redis服务端 解压目录下执行redis ...

  6. Linux服务器---邮件服务postfix安装

    安装postfix postfix是一个快速.易于管理.安全性高的邮件发送服务,可以配合dovecot实现一个完美的邮箱服务器. 1.安装postfix [root@localhost ~]# rpm ...

  7. 谷歌重磅开源强化学习框架Dopamine吊打OpenAI

    谷歌重磅开源强化学习框架Dopamine吊打OpenAI 近日OpenAI在Dota 2上的表现,让强化学习又火了一把,但是 OpenAI 的强化学习训练环境 OpenAI Gym 却屡遭抱怨,比如不 ...

  8. mongodb可视化工具 studio3t robo3T 下载安装使用介绍

    mongodb可视化工具 studio3t  robo3T 下载安装使用介绍 下载地址: https://studio3t.com/download robo3T

  9. scrapy 去重 dont_filter=False

    yield Request(...... dont_filter=False)

  10. Prometheus监控学习笔记之初识PromQL

    0x00 概述 Prometheus 提供了一种功能表达式语言 PromQL,允许用户实时选择和汇聚时间序列数据.表达式的结果可以在浏览器中显示为图形,也可以显示为表格数据,或者由外部系统通过 HTT ...