poj 1160 Post Offices(经典dp)

原创 2016年05月07日 16:56:25

题目:
poj 1160

题意:

给你n个村庄和它的坐标,现在要在其中一些村庄建m个邮局,想要村庄到最近的邮局距离之和最近。

分析:
这道题。很经典的dp

dp[i][j]表示建第i个邮局,覆盖到第j个村庄的距离之和。

问题在于状态方程怎么写?

dp[i][j]=min(dp[i][j],dp[i-1][k]+dis[k+1][j]) 意思就是建了i个邮局管辖1-j个村庄,或者建i-1个邮局管辖1-k个,而后边的k+1到j个村庄在建第i个。

其中这个dis[i][j]需要预处理一下。这个dis[i][j]表示 邮局i-j之间只建一个邮局的最优距离。经事实证明,是中点位置。辣么,怎么证明哩?

可以用反证法,其中还有分成两种情况。
一. 有奇数个村庄。如果假设不在正中间,比如说往左偏一个见图

二.有偶数个村庄
那他没有严格意义上的中点,他中点的左边一个村庄和右边一个村庄是一样的。

所以上代码

#include<cstdio>
#include<algorithm>
//#include<cstring>
#define inf 0x3fffffff
using namespace std;
int n,v,pos[301];
int dp[301][301],dis[301][301];  //dis记录的是村庄i到j的距离 
int main()
{
    scanf("%d%d",&n,&v);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&pos[i]);
    }
    for(int i=1;i<n;i++)
    {
        dis[i][i]=0;
        for(int j=1;j<=n;j++)
        {
                dis[j-i][j]=dis[j-i][j-1]+pos[j]-pos[(2*j-i)/2];
        }
    } 
    dp[0][0]=0;
    for(int i=1;i<=n;i++)
    {
        dp[0][i]=inf;
    }
    for(int i=1;i<=v;i++)
    {
        for(int j=1;j<=n;j++)
        {
            dp[i][j]=inf;
            for(int k=i-1;k<j;k++)
            {
                dp[i][j]=min(dp[i][j],dp[i-1][k]+dis[k+1][j]);
            }
        }
    }
    printf("%d",dp[v][n]);
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

POJ 1160 Post Office(经典DP)

题意: 一些村庄被建立在一条笔直的高速公路边上,我们用一条坐标轴来描述这条高速公路,每一个村庄的坐标都是整数,没 有两个村庄坐标相同。两个村庄间的距离,定义为它们的坐标值差的绝对值。我们需要在一些村...

POJ1160 Post Office(经典DP)

题目点我点我点我 题目大意:在V个村庄建立P个邮局,求每个村庄到邮局的最短距离总和。 解题思路:经典DP问题。 DP问题经常是从子问题推及到父问题,此题也如此。 假设现有m个村庄V1、V2、V3…...

POJ 1160:Post Office 邮局经典DP

Post Office Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17168   A...

【POJ1160】Post Office(动态规划 DP)

题目给出一条直线上的m个村庄及其距离,给出n个邮局,要求怎么建n个邮局使代价最小。思路:用opt[i][j]记录把前i个邮局建到前j个村庄中的最优解,用cost[i][j]记录所有在i到j村庄中,建1...

dp四边形优化 poj 1160 Post Office题解

累加器传送门:http://blog.csdn.net/NOIAu/article/details/71775000题目传送门:https://cn.vjudge.net/problem/POJ-11...
  • NOIAu
  • NOIAu
  • 2017年05月19日 17:47
  • 126

POJ-1160 Post Office(dp+四边形不等式)

I - Post Office  POJ - 1160  题意:有N个村庄,坐标Xi依次递增,现在将P个邮局分别建在村庄中,要求所有村庄到最近的邮局的距离最近,问距离之和为多少 题解:普通d...

poj 1160 Post Office--DP--类背包问题

/* 经典DP 也可以说是背包问题:每个邮局占据一些村庄,求恰好占据完这些村庄时,距离的最小值(没有使用的那段代码可以这么理解) 1、考虑在V个村庄中只建立【一个】邮局的情况,显然可以知道,将邮局建立...

POJ 1160 Post Office(四边形不等式优化DP)

题意:在村庄内建邮局,要使村庄到邮局的距离和最小。 思路:用w[i][j]表示i到j之间建一个邮局的最小花费,那么可以得到状态转移方程dp[i][j] = min(dp[i-1][k]+w[k+1]...

[dp] poj1160 Post office

dp题解
  • gdymind
  • gdymind
  • 2016年03月11日 00:50
  • 111

DP 【POJ1160】POST OFFICE 邮局问题

题意:在一个坐标轴上有n个村庄,每个村庄有一个坐标a[i],现在要在这n个村庄之间建立m个邮局,求每个村庄到距离它最近的邮局的距离之和。 其中n 【题目分析】:经典DP 1、考虑...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj 1160 Post Offices(经典dp)
举报原因:
原因补充:

(最多只允许输入30个字)