题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6024

题意:有n个room在一条直线上,需要这这些room里面建造商店,如果第i个room建造,则要总花费加上Ci , 不建造的话, 总花费就要加上去左边的第一间商店的距离。求总的最小花费。

题解:dp1[i] 为第i个建造的最小花费, dp2[i] 为第i个不建造的最小花费。

   dp1[i] = min(dp1[i-1], dp2[i-1]) + Ci

   dp2[i] = min(dp2[i], dp1[j] + dis[j][i])  j为[1, i-1]。

   j为左手边第一间商店,那么从j到i都是不建商店的,就需要加上 每一间room到商店的距离。

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <set>
using namespace std;
typedef long long LL;
#define ms(a, b) memset(a, b, sizeof(a))
#define pb push_back
#define mp make_pair
const int INF = 0x7fffffff;
const int inf = 0x3f3f3f3f;
const int mod = 1e9+;
const int maxn = + ;
struct node
{
LL x, c;
};
LL dp1[maxn];
LL dp2[maxn];
LL dis[maxn][maxn];
void init() {
ms(dp1, );
ms(dp2, );
ms(dis, );
}
bool cmp(node x1, node x2)
{
return x1.x < x2.x;
}
void solve(int n) {
node a[maxn];
for(int i=;i<=n;i++)
scanf("%lld%lld", &a[i].x, &a[i].c);
for(int i=;i<=n;i++)
a[i].x+=;
sort(a+, a+n+, cmp);
for(int i = ;i<=n;i++){
for(int j = i+;j<=n;j++){
dis[i][j] = dis[i][j-] + (a[j].x - a[i].x);
}
}
dp1[] = a[].c;
dp2[] = a[].c;
for(int i = ;i<=n;i++){
dp1[i] = min(dp1[i-], dp2[i-]) + a[i].c;
dp2[i] = dp1[i];
for(int j = i-;j>=;j--){
dp2[i] = min(dp2[i], dp1[j]+dis[j][i]);
}
}
printf("%lld\n", min(dp1[n], dp2[n]));
}
int main() {
#ifdef LOCAL
freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
#endif
int n;
while(~scanf("%d", &n)){
init();
solve(n);
}
return ;
}

最新文章

  1. java基础 布局管理器
  2. 一道关于阿里简单面试题的反思C/C++
  3. sql中列数据横着显示
  4. Bootstrap页面布局10 - BS代码
  5. &lt;转&gt;如何改变讨好型人格 | 你根本不需要讨好任何人
  6. 2016传统行业&ldquo;互联网+&rdquo;元年,你准备好了吗?
  7. Google翻译,3个步骤灭绝人类
  8. Aizu 2309 Sleeping Time DFS
  9. PLSQL Developer激活码
  10. python运算符使用规律
  11. json数据获取
  12. android studio 实现代码混淆
  13. wemall app商城源码Android之支付宝接口公用函数
  14. Nmon实时监控并生成HTML监控报告
  15. 理解bootstrap的列偏移offset 和 推拉push/pull的区别?
  16. 乘法原理,加法原理,多重集的排列数(多个系列操作穿插的排列数) 进阶指南 洛谷p4778
  17. python type metaclass
  18. postman的Testing examples(常用方法)
  19. css写三角形
  20. ASP.NET Core 2 学习笔记(五)静态文件

热门文章

  1. 关于 阿里云 的linux 安装 jdk和tomcat 中的问题(解压版的jdk和tomcat)
  2. 5519: [Usaco2016 Open]Landscaping
  3. getCurrentSession 与 openSession区别
  4. Java数据结构之队列(Queue)
  5. 使用内核LED框架搭建驱动 ——led_classdev_register
  6. java synchronized实现可见性对比volatile
  7. 用Java语言做ACM的注意事项
  8. 问题 J: 老肖数等式
  9. Elasticsearch7.X 入门学习第五课笔记---- - Mapping设定介绍
  10. 数组去重ES6