首页 > 其他分享 >题解:P10967 [IOI2000] 邮局(原始版)

题解:P10967 [IOI2000] 邮局(原始版)

时间:2024-11-11 17:57:21浏览次数:1  
标签:IOI2000 题解 int P10967 MAXN 村庄 邮局 dp

思路

首先将坐标排序。

定义 \(dp_{i,j}\) 为前 \(i\) 个村庄放 \(j\) 个邮局的前 \(i\) 个村庄的最小距离总和,\(f(i,j)\) 表示村庄区间 \([i,j]\) 内放一个村庄时该区间的总和。

转化式易得 \(dp_{i}{j}=dp_{k}{j-1}+f(k+1,i),k\in [0,i)\)。

则本题的难点就为求 \(f(k-1,i)\)。

基本的数学知识,若村庄数为奇数,放中位数处距离和最小。若村庄为偶数,放中间两个村庄之间任意一处均可。

于是就得到了一个 \(O(PV^{3})\) 的做法。

#include<bits/stdc++.h>
using namespace std;
const int MAXN=3010,N=310;
int V,P,X[MAXN],dp[MAXN][N];
int f(int l,int r) {
	int mid=l+r>>1,ans=0;
	for(int i=l;i<mid;i++) ans+=X[mid]-X[i];
	for(int i=mid+1;i<=r;i++) ans+=X[i]-X[mid];
	return ans;
}
int main() {
	cin>>V>>P;
	for(int i=1;i<=V;i++) cin>>X[i];
	sort(X+1,X+V+1);
	memset(dp,0x3f,sizeof(dp));
	dp[0][0]=0;
	for(int j=1;j<=P;j++) {
		for(int i=1;i<=V;i++) {
			for(int k=0;k<i;k++) {
				dp[i][j]=min(dp[k][j-1]+f(k+1,i),dp[i][j]);
			}
		}
	}
	cout<<dp[V][P]<<endl;
	return 0;
}

标签:IOI2000,题解,int,P10967,MAXN,村庄,邮局,dp
From: https://www.cnblogs.com/aub-unluck-beginning/p/18540273

相关文章

  • 题解:UVA1362 Exploring Pyramids
    思路:显然的,若不是叶子结点都应该至少遍历两次。于是两个相同访问之间就可能是一颗子树。更加具体的,如同\(s_l,\dots,s_k,\dots,s_r\),使得\(s_l=s_k\),那么就可以认为\(s[l,k]\)是\(s[l,r]\)的一颗子树,设区间\(s[l,r]\)的结构数量为\(f_{l,r}\),那么根据乘法原理,当把\(......
  • 241111 noip 题解
    省流:\(100+50+10+30\)。还是不稳定啊,noip上不了270就真的要退役了。T1题意:给定一个长度为\(n\)的序列\(a\),每次你可以交换相邻两个位置,求出最小交换次数以及字典序最小的交换方案使得\(a\)的每个不是本身的前缀都不是排列。\(n\leq10^5\)。注意到每次交换至多会减少一......
  • [题解]P11233 [CSP-S 2024] 染色
    P11233[CSP-S2024]染色设\(f[i][j=0/1]\)表示涂到第\(i\)位,且第\(i\)为颜色为\(j\),则考虑用\(i\)之前能和\(i\)匹配的位置\(p\)进行转移。\(p\)需要满足下面的条件:\(a[p]=a[i]\)。\(p\)的颜色为\(j\)。\([p+1,i-1]\)之间的颜色全不为\(j\)。显然,我们只需要找满足条件的......
  • AT_agc012_f [AGC012F] Prefix Median 题解
    首先将序列排序,这是显然的。考虑倒着确定\(b\)序列中的每个数。即从完整的\(a\)序列开始,每次删掉两个数,记录中位数。先找出\(b\)序列合法的条件。容易发现对于所有\(i\),在\(b_{p_i}\)成为中位数时,\(p_i,p_{i+1}\)之间的所有数都已经被删除了,且\(i\lep_i\le2n-i\)。......
  • Eplan2022卡顿问题解决
    EPLAN2022卡顿崩溃怎么解决 第一步:可以检查下用户设置。打开菜单"选项→设置:用户→翻译→字典":不勾选"自动完成"和"自动更正"。在选项设置框中输入"自动",快速找到用户设置,取消勾选,如下图。 第二步:可以检查下电脑语言设置。设置:常规→兼容性"。如下图。 ......
  • CF 1257 题解
    CF1257题解ATwoRivalStudents每次交换都可以让距离增加\(1\),上界是\(n-1\).题目说至多而不是恰好交换\(x\)次,于是不需要考虑边界.BMagicStick一个重要的观察是:如果能够得到\(x\),那么就能得到任意小于等于\(x\)的数,这是操作二保证的.考虑操作\(1\)......
  • 2024中高级前端面试真题解析
    我是一名本科毕业的前端程序媛,工作5年了,周末双休待遇还不错。公司最近要搬迁新地址,业务要整合到一起,所以最近比较清闲,天天上班摸鱼,闲着没事,整理了以前面试时用的资料文档有945道:JavaScript(323题)CSS(61题)HTML(57题)React(83题)Vue(80题)算法(19题)计算机网络(71题)Node.js(2......
  • 【题解】CF1993【EF】
    A注意到一种选项最多填对\(n\)个题所以答案是\(\min(n,cnt_a)+\min(n,cnt_b)+\min(n,cnt_c)+\min(n,cnt_d)\)B注意到操作只能让奇数变多,偶数变少,所以我们只能把偶数全变成奇数特判掉全是偶数的情况,容易得到答案下界:偶数个数容易想到一个naive贪心做法:每次都拿出奇数......
  • 2024ccpc女生赛题解
    考场上写的A,C,H,L,M下来补一下剩下的E注意\(p[i]<i\)这个性质和重心关系不大,一个简单的构造,手模几个样例就能发现规律。倒着枚举:\(c[i]=0\)的是叶子,不用处理\(c[i]>0\),这个点连到父亲所在连通块的根上即可。并查集维护连通块以及连通块的根,根就是连通块中最小编号的点。#inc......
  • 题解:P11250 [GESP202409 八级] 手套配对
    题目传送门思路讲解一道非常经典的排列组合的题。首先,我们要先从nnn对手套中取走kk......