题目传送门

题意:n个饭店在一条直线上,给了它们的坐标,现在要建造m个停车场,饭店没有停车场的要到最近的停车场,问所有饭店到停车场的最短距离

分析:易得区间(i, j)的最短距离和一定是建在(i + j) / 2的饭店,预处理出(i, j)的距离和sum[i][j],mark[i][j] 表示区间的最优停车场的位置,mid[i][j]表示(i + j) / 2。状态转移方程:dp[i][j] = max (dp[k-1][j-1] + sum[k][i]);

收获:学习递归打印路径

代码:

/************************************************
* Author        :Running_Time
* Created Time  :2015-8-29 16:42:33
* File Name     :UVA_662.cpp************************************************/#include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std;#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int N = 2e2 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
int dp[N][33];
int sum[N][N], d[N], mark[N][N], mid[N][N];
int n, m;
int idx;void print(int i, int j)    {if (i < 1 || j < 1) return ;print (mark[i][j]-1, j-1);printf ("Depot %d at restaurant %d serves restaurant", ++idx, mid[mark[i][j]][i]);if (mark[i][j] == i)    {printf (" %d\n", i); return ;}else    printf ("s %d to %d\n", mark[i][j], i);
}int main(void)    {int cas = 0;while (scanf ("%d%d", &n, &m) == 2) {if (!n && !m)   break;for (int i=1; i<=n; ++i)    scanf ("%d", &d[i]);memset (sum, 0, sizeof (sum));for (int i=1; i<=n; ++i)    {mid[i][i]=  i;for (int j=i+1; j<=n; ++j)    {int mm = (i + j) >> 1;mid[i][j] = mm;for (int k=i; k<=j; ++k)    {sum[i][j] += abs (d[mm] - d[k]);}}}memset (dp, INF, sizeof (dp));memset (dp[0], 0, sizeof (dp[0]));for (int i=1; i<=n; ++i)    {for (int j=1; j<=m; ++j)    {for (int k=1; k<=i; ++k)    {int tmp = dp[k-1][j-1] + sum[k][i];if (dp[i][j] >= tmp) {dp[i][j] = tmp;mark[i][j] = k; }}}}printf ("Chain %d\n", ++cas);idx = 0;    print (n, m);printf ("Total distance sum = %d\n\n", dp[n][m]);}return 0;
}

  

转载于:https://www.cnblogs.com/Running-Time/p/4773925.html

DP(递归打印路径) UVA 662 Fast Food相关推荐

  1. UVA 662 - Fast Food

    题目链接~~> 做题感悟: 这题因为输出的时候没有看到单复数,wa了老半天,无语,净犯这些低级错误. 解题思路: (1) . 看这题首先想到区间 dp ,一段区间如果要找一个服务的饭店那是一定的 ...

  2. UVA 662 Fast Food(dp)

    题意: 一条直线马路上有n个餐馆,各个餐馆的坐标为di. 现在要在这n个餐馆中选择k个餐馆用来建造仓库. 没有仓库的餐馆,只能使用附近最近的一个仓库. 问总距离最少的建造方案,并输出. 思路: 先进行 ...

  3. UVA - 662 Fast Food

    怎么说呢,我一直希望自己能独立的想出从没见过的类型的题目,但基本上从来没有过,究竟是自己不够聪明还是说这就是变聪明的过程??但除了第二个答案我别无选择... 首先要想清楚一段restruant只有取中 ...

  4. UVA 662 Fast Food

    UVA_662 首先我们考虑区间[i,j]内如果建一个餐馆应该建在哪个位置,比较容易证明应该是建在中间的位置,如果是偶数个元素,中间两个位置随便一个都可以.这样我们就可以预处理出区间[i,j]内建一个 ...

  5. BFS最短路打印路径

    Problem Description 2020级的新生即将来USST报道了,学校规定报道地点定在了516号的老体育馆. 现在为了方便新生报道,Wiki自我推荐为新生绘制一张校园地图.地图功能很简单: ...

  6. 迪杰斯特拉算法及变式(最短距离,打印路径,最短经过节点数)

    问题描述 给定一个图,图的节点名称用(000 ~ N−1N - 1N−1)表示.NNN为图的节点个数,MMM为边的个数,SSS为起始点. 输入条件: 第一行输入 NMSN M SNMS. 其后MMM行 ...

  7. python递归打印目录树

    '''尚学堂学习笔记,复习用''' 递归打印目录树 import osall_files = []#传入文件路径和层级 def get_all_files(path, level):#引用该路径下的子 ...

  8. Frog Traveler 最短路,bfs剪枝,打印路径

    题意 : 给两个长度为n的数组,初始位于索引n,目标是越过索引1,注意不能往后跳,每次可以跳0到a[i]a[i]a[i]米,即,身处索引iii,可以跳[0,a[i]][0, a[i]][0,a[i]] ...

  9. hdu-1104-Remainder(BFS打印路径+数论)(%与mod的区别)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1104 题意:(注意题目中的%是指mod)开始给了你n, k, m....每次由+m, -m, *m, ...

  10. 【Java文件操作(一)】递归打印文件目录

    我的博客--Java文件操作系列 [Java文件操作(一)]递归打印文件目录 [Java文件操作(二)]删除文件夹,但保留其内部文件 [Java文件操作(三)]递归复制文件夹内所有文件 [Java 文 ...

最新文章

  1. matplotlib散点图,圆
  2. linux安装成桌面
  3. faster rcnn源码理解(二)之AnchorTargetLayer(网络中的rpn_data)
  4. webapi中的模型验证
  5. GDCM:读取gdcm::DataSetHelper的测试程序
  6. 九零后程序员心塞大哭:“我累的心脏疼,父母却说我工作很轻松”
  7. 如果你跟夕小瑶恋爱了...(上)
  8. PageHelper分页插件使用
  9. 人工智能芯片与传统芯片的区别
  10. Mysql 学习总结(86)—— Mysql 的 JSON 数据类型正确使用姿势
  11. (编译适用于ARM的linux内核并进行QEMU仿真)Compile Linux kernel 3.2 for ARM and emulate with QEMU
  12. 3、JSON相关基础知识点总结(3)
  13. 安卓手机左右声道调节应用下载_闪电全能格式转换器下载_闪电全能格式转换器官方下载[转换工具]...
  14. 计算机考试感受作文,关于考试后的感想作文(精选10篇)
  15. 查看python源码位置方法以及潜在误区
  16. 计算机主板电源接口8pin,菜鸟老鸟都要知道 电源接口图文全教程
  17. 内核block层IO调度器—bfq算法深入探索3
  18. 茶几 清明上河图 诗句
  19. word中软回车和硬回车删除、替换
  20. 了解CompletableFuture

热门文章

  1. python+pytest接口自动化_python接口自动化11-pytest入门
  2. docker设置开机自启动
  3. 卷积神经网络 第一周作业 Convolution+model+-+Application+-+v1
  4. UFLDL教程 -- 译文版
  5. hbase 伪分布安装 java_HBase伪分布搭建
  6. 区块链 链上脚本、智能合约和Dapp的关系区别
  7. 比特币 出块速度多少 为什么每秒7笔 以太坊15TPS
  8. kubernetes 查看日志方法
  9. mysql 一条记录的某个字段为空,是否占用存储
  10. 去除移动端alert/confirm的网址(url)