HDU 6024 Building Shops (简单dp)
题目链接: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 ;
}
HDU 6024 Building Shops (简单dp)的更多相关文章
- HDU 6024 Building Shops
$dp$. $dp[i]$表示到$i$位置,且$i$位置建立了的最小花费,那么$dp[i] = min(dp[k]+cost[i+1][k-1])$,$k$是上一个建的位置.最后枚举$dp[i]$,加 ...
- hdu 2084 数塔 (简单dp)
http://acm.hdu.edu.cn/showproblem.php?pid=2084 数塔 Time Limit: 1000/1000 MS (Java/Others) Memory L ...
- HDU 2084 数塔(简单DP入门)
数塔 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- HDU 2571 命运(简单dp)
传送门 真是刷越多题,越容易满足.算是一道很简单的DP了.终于可以自己写出来了. 二维矩阵每个点都有一个幸运值,要求从左上走到右下最多能积累多少幸运值. 重点就是左上右下必须都踩到. dp[i][j] ...
- hdu 4826 Labyrinth(简单dp)
Description 度度熊是一只喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫,该迷宫只能从矩阵左上角第一个方格开始走,只有走到右上角的第一个格子才算走出迷宫,每一次只能走一格,且只能向上向下向 ...
- Ring HDU - 2296 AC自动机+简单DP和恶心的方案输出
题意: 就是现在给出m个串,每个串都有一个权值,现在你要找到一个长度不超过n的字符串, 其中之前的m个串每出现一次就算一次那个字符串的权值, 求能找到的最大权值的字符串,如果存在多个解,输出最短的字典 ...
- hdu 1398 Square Coins(简单dp)
Square Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Pro ...
- hdu 1003 Max sum(简单DP)
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem ...
- HDU 1260 Tickets(简单dp)
Tickets Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
随机推荐
- Java提取文本文档中的所有网址(小案例介绍正则基础知识)
正则表达式基础以及Java中使用正则查找 定义: 正则表达式是一些用来匹配和处理文本的字符串 正则的基础(先大致了解下) 1. 正则表达式的作用 查找特定的信息(搜索) 替换一些文本(替换) 2. 正 ...
- Struts2异常:HTTP Status 404 - /Struts2/book/addBook.action
HTTP Status 404 - /Struts2/book/addBook.action 如果在Struts2的框架中访问路径出现了这个错误,可能存在的原因有如下的两个: 1. 路径写错,也就是a ...
- [Python3 练习] 008 欧几里德算法
题目:写个"欧几里德算法"的小程序 (1) 描述 我知识浅薄,一开始被"欧几里德"的大名唬住了,去搜了一下才知道这就是高中时学过的"辗转相除法&quo ...
- [2019南京网络赛D题]Robots
题目链接 2019.9.2更新 第二天睡醒想了想发现好像搜一遍就可以过,赛时写的花里胡哨的还错了,太菜了QAQ #include<bits/stdc++.h> using namespac ...
- 本地启oracle实例服务无法重启,协议适配器错误
今天遇到一位朋友的oracle实例服务无法起来,启动时报错: 分析的原因是可能早上服务器突然断电造成的,经过对tns的测试 经过我们讨论和诊断,最后诊断的处理方法是将实例删了重装,处理后服务恢复正常: ...
- .NET平台 C# ASP.NET
.NET 平台 根据微软的定义: .NET is a“ revolutionary new platform, built on open Internet protocols and standar ...
- markdown简介及基本语法
一.前言 Markdown是一种轻量级标记语言,它以纯文本形式(易读.易写.易更改)编写文档,并最终以HTML格式发布. Markdown也可以理解为将以MARKDOWN语法编写的语言转换成HTML内 ...
- vue-fiters过滤器的使用
1.定义过滤器 2.使用过滤器 ...... <el-table-column prop="user_gender" align="center" lab ...
- eclipse hibernate配置文件(*.hbm.xml)加上自动提示功能
转自:https://blog.csdn.net/u012217085/article/details/17397843?utm_source=blogkpcl3 1. 标签:hibernate 在编 ...
- 1. AtomicInteger 、Unsafe 及 CAS方法的整理
本文摘自: https://blog.csdn.net/fanrenxiang/article/details/80623884 http://ifeve.com/sun-misc-unsafe/ h ...