题目描述:

  每组数据给n个点,点按一维坐标升序给出,要求划分成k块,在每一块中,取一个站,要求每个块中所有的点到站的距离的和的总和最小。

思路:

  dp题,dp[i][j]表示i个点分成j块的最小距离,每一个dp[i][j]可以由前面的dp[x][j-1]推出,其中j-1 <= x <= i-1,前面j-1个分块再加上后面一块,便形成了i个点j个划分,在所有符合条件的划分中取最小值,更新dp[i][j]的值。这样的思路,我们还需要一个方法计算一个块中的距离最小值。当一个块中点的数量为奇数时,取中点为站,则距离最小,当数量为偶数时,去中间两个点的任意一个,距离最小,所以我们可以用(left+right)/2表示一个区间中的那个站点。因为结果要求输出最小值的具体划分以及站点,还需要一个pos数组储存每种情况的划分边界。

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
#define MAX 1<<30; int a[],dis[][],dp[][],pos[][][]; int main()
{
int n,K,num = ;
while(~scanf("%d%d",&n,&K) && n && K)
{
num++;
memset(pos,,sizeof(pos));
memset(dis,,sizeof(dis));
for(int i = ;i <= n;i++) scanf("%d",&a[i]);
for(int i = ;i <= n;i++)
{
dis[i][i] = ;
for(int j = i+;j <= n;j++)
{
int mid = (i+j)/;
for(int k = i;k < mid;k++) dis[i][j] += a[mid]-a[k];
for(int k = mid+;k <= j;k++) dis[i][j] += a[k]-a[mid];
}
}
for(int i = ;i <= n;i++)
{
dp[i][] = dis[][i];
pos[i][][i] = ;
for(int j = ;j <= i;j++) dp[i][j] = MAX;
}
for(int i = ;i <= n;i++)
{
for(int j = ;j <= min(i,K);j++)
{
for(int k = j-;k <= i-;k++)
{
int temp = dp[k][j-]+dis[k+][i];
if(temp < dp[i][j])
{
dp[i][j] = temp;
for(int l = ;l <= k;l++)
{
pos[i][j][l] = pos[k][j-][l];
}
pos[i][j][i] = ;
}
}
}
}
printf("Chain %d\n",num);
int now = ;
for(int i = ;i <= K;i++)
{
int left = now;
for(;!pos[n][K][now];now++);
int right = now++;
if (left == right)
{
printf("Depot %d at restaurant %d serves restaurant %d\n",i,left,left);
}
else
{
printf("Depot %d at restaurant %d serves restaurants %d to %d\n",i,(left+right)/,left,right);
}
}
printf("Total distance sum = %d\n\n",dp[n][K]); }
return ;
}

POJ_1485_dp的更多相关文章

随机推荐

  1. 05_jquery 操作table使tr(数据)整行上移下移

    1:ajax请求数据到页面 function GetWorkSpaceList() { GetServerData("get", GetEnterpriseUrl() + &quo ...

  2. .net core 开车记:Data Protection Key 过期问题与登录页面访问慢

    K8s 船还没修好,.net core 车又出了问题,开着 k8s 豪华邮轮.飚着 .net core 极品飞车的好事真是多磨. 自从我们用上 .net core ,就一直被 .net core 的一 ...

  3. Theia APIs——事件

    上一篇:Theia APIs——Preferences 事件 Theia中的事件或许会让你感到困惑,希望本节能阐述清楚. 来看下面的代码: (来自logger-watcher.ts) @injecta ...

  4. 天梯 L2 这是二叉搜索树吗?

    L2-004 这是二叉搜索树吗? (25 分) 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点的键值: 其右子树中所有结点的键值大于等于该结点的 ...

  5. 让vue-router渲染为指定的标签

    <router-link :to="{name:'cart'}" tag="li"> cart </router-link> 在rout ...

  6. Tasker如何使用Tasker插件以及Tasker第三方应用

    很多人不清楚Tasker插件和Tasker第三方应用之间的区别,以及与Tasker的关系有何不同,其实对于使用者而言并不需要理解他们之间的区别,因为这两者在使用上的区别逐渐模糊而变得没有区别,不过本人 ...

  7. ElasticSearch安装中文分词器IKAnalyzer

    # ElasticSearch安装中文分词器IKAnalyzer  本篇主要讲解如何在ElasticSearch中安装中文分词器IKAnalyzer,拆分的每个词都是我们熟知的词语,从而建立词汇与文档 ...

  8. Java框架之Spring02-AOP-动态代理-AspectJ-JdbcTemplate-事务

    AOP 动态代理 代理设计模式的原理:使用一个代理将原本对象包装起来,然后用该代理对象”取代”原始对象.任何对原始对象的调用都要通过代理.代理对象决定是否以及何时将方法调用转到原始对象上. 代理模式的 ...

  9. dfs - 概率

    C. Journey time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...

  10. Adobe Acrobat DC 安装

    Adobe Acrobat DC 制作pdf模板 下载:http://www.downza.cn/soft/20562.html 安装出错解决: 可以将C:\Program Files (x86)\C ...