POJ 1160 Post Office(DP)
来源:互联网 发布:手机时间安排软件 编辑:程序博客网 时间:2024/06/12 01:38
题意:有m个村庄排成一条直线,现在需要在这些村庄里建n个邮局,使得各个村庄到最近邮局的总距离和最小。
思路: 用dp[i][j]记录把前i个邮局建到前j个村庄中的最优解。
用cost[i][j]记录所有在i到j村庄中,建1个邮局的最小代价。让前i个邮局覆盖前j个村庄,第i+1个邮局覆盖第j+1至j+k个村庄(j+k<=n),则状态转移方程为
dp[i+1][j+k]=min{dp[i][j]+cost[j+1][j+k];} (k+j<=n)
#include<stdio.h>#define maxn 2000000int m,n;//m个村庄,n个邮局int v[1000],dp[1000][1000],cost[1000][1000];//dp[i][j]记录把前i个邮局建到前j个村庄中的最优解void pre()//提前预处理出第i个到第j村庄建一个邮局所需要的花费{ int i,j,k,mid; for(i=1;i<=m;i++) for(j=i;j<=m;j++) { cost[i][j]=0; mid=(i+j)/2; for(k=i;k<=mid;k++) cost[i][j]+=v[mid]-v[k]; for(k=mid+1;k<=j;k++) cost[i][j]+=v[k]-v[mid]; }}int main(){ //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int i,j,k; scanf("%d%d",&m,&n); for(i=1;i<=m;i++) scanf("%d",&v[i]);//输入各个村庄的坐标 pre(); for(i=0;i<=n;i++) for(j=0;j<=m;j++) dp[i][j]=maxn; dp[0][0]=0; for(i=0;i<=n;i++) for(j=0;j<=m;j++) if(dp[i][j]<maxn) for(k=1;j+k<=m;k++)//让前i个邮局覆盖前k个村庄,第i+1个邮局覆盖第j+1到第j+k个村庄。 if(dp[i+1][j+k]>dp[i][j]+cost[j+1][j+k]) dp[i+1][j+k]=dp[i][j]+cost[j+1][j+k]; printf("%d\n",dp[n][m]);}
- POJ 1160 Post Office(DP)
- poj - 1160 - Post Office(dp)
- poj 1160 Post Office(DP)
- poj 1160 Post Office(dp)
- POJ 1160 Post Office(经典DP)
- POJ 1160 Post Office(dp)
- POJ 1160 Post Office(dp)
- POJ 1160 Post Office(经典DP)
- poj-1160 post office (dp)
- Post Office - POJ 1160 dp
- 【DP】 POJ 1160 Post Office
- POJ 1160 Post Office DP
- POJ 1160 Post Office (DP)
- poj 1160 post office------DP
- poj 1160 Post Office(DP-简单DP)
- poj 1160 Post Office & SCAU 07校赛10320 Post Office ( dp )
- poj 1160 Post Office (四边形不等式优化DP)
- POJ 1160 Post Office (区间DP+重心)
- Spring+Quartz使用
- eclipse不自动弹出提示(alt+/快捷键失效)
- 第十天(Using Stores)
- ubuntu安装jdk1.6.0_45
- 用golang编写简单的Echo Server
- POJ 1160 Post Office(DP)
- Linux下专业软件的替代品
- 2084 数塔
- 雷鲍夫沟通法则
- eclipse里访问tomcat首页出现404错误解决之法 【转】
- 怎样提高https站点的访问速度
- UVA 321 The New Villa (隐式图+BFS +判重)
- U盟的错误详情分析
- Java内存调优经验总结