POJ 1160

POJ 1160

题意

有n个村庄,要求选其中的p个建立邮局,求最小的距离。

思路

学习kedebug博客思路代码

#include <iostream>
#include <algorithm>
using namespace std;

const int MAXN = 310;
const int IFNS = 0x3fffffff;

int dp[MAXN][MAXN],cost[MAXN][MAXN],x[MAXN];
int vil,office;

int calccost(int i, int j){
    int ans = 0;
    while(i<j){
        ans += x[j] - x[i];
        i++,j--;
    }
    return ans;
}

int workout(){
    for(int i=0;i<office;i++){
        for(int j = i;j<= vil;j++){
            dp[0][0] = 0;

        }
    }

    for(int i=1;i<=office;i++){
        for(int j=i;j<=vil;j++){
            for(int k=0;k<j;k++)
                dp[i][j] = min(dp[i][j],dp[i-1][k]+cost[k+1][j]);
        }
    }
    return dp[office][vil];
}

int main(){
    // 输入村庄数,邮局 还有村庄的位置 
    while(~scanf("%d%d",&vil,&office)){
        x[0] = 0;
        for(int i=0;i<vil;i++){
            scanf("%d",&x[i]);
        }

        for(int i=1;i<=vil;i++)
            for (int j = i; j <= vil; ++j)
                cost[i][j] = calccost(i,j);//计算两个村庄之间所有村庄的距离之和

            
        printf("%d\n",workout());   
    }
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一年级语文上册生字表 生字表一(共400字) 啊(ā)爱(ài)安(ān)岸(àn)爸(bà)八(bā)巴(bā)...
    meychang阅读 7,964评论 0 6
  • 归去来兮。 1.1 说明 本篇为《挑战程序设计竞赛(第2版)》[http://www.ituring.com.cn...
    尤汐Yogy阅读 14,884评论 0 160
  • ‍内‍化‍于‍心‍,‍外‍放‍于‍行‍。‍只有‍意识‍到了‍,‍才能‍做到‍。
    33174dada65f阅读 2,732评论 0 0
  • 最近看网上经常有人说黄蓉爱上郭靖是因为第一次见面的时候,又请黄蓉吃大餐,又送礼物又送宝马的。按照现在的观点好像是挺...
    寂寞的小熊阅读 4,863评论 0 1
  • 所以很多时候我真的不想去想,可是我能够管着自己的脚不任性的向前走,却总是管不住思想的任意妄为,不自觉的就会偏离了管...
    2016冰山来客阅读 2,224评论 0 6