Fixing the Great Wall UVA - 1336 区间dp+前缀和+记忆化

C. Stairs and Elevators 二分查找 C. Stairs and Elevatorstime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputIn the year of 30XX30XX participants of some world programming championship... 阅读详情

紫书代码  dp中表示方向的p  因为机器人的有效位置肯定是i j两个点上 所以只要判断 是从左端点出发还是从右端点出发就能很快得计算出路程的时间  p=0时表示当前位于左边如果想要J+1 就要  j+1的标号x减去i的x  其他位置同理

同时最后要加上 每个点时间为0的修理费用

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1000 + 5;
const double INF = 1e30;
int kase, n;
int vis[maxn][maxn][2];//记忆化
double v, x, d[maxn][maxn][2];
double psdt[maxn]; // 前缀和
struct Section {
  double x, c, dt;


  bool operator < (const Section& rhs) const {
    return x < rhs.x;
  }
} s[maxn];




double cost(double x1, double x2, int i, int j) {
  double finished_dt = 0;
  assert(i <= j);
  if(i >= 0 && j >= 0) finished_dt += psdt[j] - psdt[i-1];
  return (psdt[n] - finished_dt) * fabs(x2 - x1) / v;
}

double dp(int i, int j, int p) {
  if(i == 1 && j == n) return 0;
  double& ans = d[i][j][p];
  if(vis[i][j][p] ) return ans;
  vis[i][j][p] = 1;

  ans = INF;
  double x = (p == 0 ? s[i].x : s[j].x);//用来计算路程的 p==0 表示从左边的点出发  
  if(i > 1) ans = min(ans, dp(i-1, j, 0) + cost(x, s[i-1].x, i, j));
  if(j < n) ans = min(ans, dp(i, j+1, 1) + cost(x, s[j+1].x, i, j));
  return ans;
}


int main(){
	while(scanf("%d%lf%lf",&n,&v,&x)==3&&n){
		 double sumc = 0;
		memset(vis,0,sizeof(vis));
		 for(int i = 1; i <= n; i++) {
             scanf("%lf%lf%lf", &s[i].x, &s[i].c, &s[i].dt);
             sumc += s[i].c;
        }
		 sort(s+1, s+n+1);
    for(int i = 1; i <= n; i++)
      psdt[i] = psdt[i-1] + s[i].dt;//前缀和
		s[0].x = -INF;
    s[n+1].x = INF;
	 double ans = INF;
    for(int i = 1; i <= n+1; i++)//找到x点在哪俩个损坏点之间进行dp
      if(x > s[i-1].x && x < s[i].x) {
        if(i > 1) ans = min(ans, dp(i-1, i-1, 0) + cost(x, s[i-1].x, -1, -1)); // move left
        if(i <= n) ans = min(ans, dp(i, i, 0) + cost(x, s[i].x, -1, -1)); // move right
        break;
      }
    printf("%.0lf\n", floor(ans + sumc));
	}

	return 0;
}

 

超十万字解读Spring AI实战:开篇 大模型技术正以惊人的速度改变世界,2025年的人工智能已不再是科幻,而是现实。大模型如ChatGPT等,正在重塑各行各业,降低技术门槛,使专业能力普及化。SpringAI的出现为Java开发者提供了桥梁,使其能在企业级系统中稳定运行AI,同时保持工程化思维。尽管SpringAI在生态、学习成本和性能上存在不足,但其企业级基因和国产化适配能力使其成为Java开发者的重要工具。本系列文章旨在介绍SpringAI的功能与特性,鼓励更多Java开发者参与AI实践,共同探索AI时代的无限可能。 阅读详情

相关推荐

IDEA类和方法注释模板设置(非常详细)

IDEA类和方法注释模板设置(非常详细)

黑桃A的博客 10万+

UVA 1336 Fixing the Great Wall(区间DP)

题意:修长城n个损坏点

glq007的acm的奋斗 1585

AI 时代嵌入式工程师的能力模型与学习路线:全系列收官

AI 时代嵌入式工程师的能力模型与学习路线:全系列收官

weixin_42162924的博客 33

UVA - 1336 Fixing the Great Wall(经典区间DP)

传送门 这样的题目见过几次了,给出起点,遍历若干坐标,每次既可以向左走又可以向右走,每个点对应权值函数,然后找一个最优的走法 1.首先需要想到的一点是,因为修理某点不耗费时间,所以假如下一个点是对应需要修理的最优点,那么从当前点到下一个最优点的路途中,可以顺便修理中间的点,那么这样就是最优花费。那么我们在修理过程中,已修理的区间一定是连续的,那么考虑区间dp 2.因为不知道当前时间,因此费用不能在到达某点时再计算,而是事先将肯定会发生的费用累加到答案中,然后“时钟归零”。对于所有区间显然需要按坐标排序,这

Happig的博客 272

基于深度学习的鸟类检测识别系统:YOLOv5 + YOLOv8 + YOLOv10 + UI界面 + 数据集

YOLOv5是当前目标检测领域非常流行的模型,具有良好的检测精度和实时推理速度。其网络结构相比前几代YOLO模型进行了优化,尤其是在检测精度和计算效率上有了显著提高。YOLOv5特点高效性:能够在较低的硬件环境下进行实时检测。易于部署和使用:YOLOv5提供了简单的API接口,方便开发者快速集成和使用。优异的精度:在多个数据集上测试,表现出色。本文详细介绍了基于YOLOv5、YOLOv8和YOLOv10的鸟类检测识别系统的设计与实现。

YOLO 1114

使用Verilog实现QR分解——嵌入式 [设计与代码]

通过Verilog的硬件描述语言,我们可以将QR分解算法实现为硬件电路,并在嵌入式系统中高效地运行。本文将介绍如何使用Verilog设计并实现QR分解算法,该算法用于将一个矩阵分解为正交矩阵Q和上三角矩阵R。具体而言,QR分解通过对矩阵的列进行正交化处理,得到正交矩阵Q,并将对应的正交化结果存储在上三角矩阵R中。该算法通过将矩阵分解为两个部分,正交矩阵Q和上三角矩阵R,实现了对矩阵的分解和变换。模块,该模块接收待分解矩阵A,并输出正交矩阵Q和上三角矩阵R。下面给出了使用Verilog实现QR分解的源代码。

CodeMaven的博客 620

UVA1336 - Fixing the Great Wall (区间DP)

题意:用机器人修复分布在一条直线段上的n个损坏点,对于每个点i,x[i]表示位置,c[i]为立刻修缮的费用,d[i]为单位时间增加的维修费用。例如若在时刻t修缮i号点,则费用为ci+t∗di。给出机器人的初始位置x,速度v。求出修缮所有点的最小费用。 分析:在任意时刻,机器人修完的点肯定是一个连续的区间,这个区间的费用不会再增加,它接下来每移动一步,增加的费用都等于区间外的d之和乘以时间。f[i...

常胜将军的博客 302

使用Qt编译Qt WebEngine

这就是使用Qt编译Qt WebEngine模块的基本步骤。通过按照上述步骤,您应该能够成功编译和使用Qt WebEngine来嵌入Web内容到您的Qt应用程序中。Qt WebEngine是Qt框架的一个模块,它提供了一个现代的Web浏览器引擎,可以在Qt应用程序中嵌入Web内容。首先,需要获取Qt的源代码。如果尚未安装,可以从Qt官方网站下载并安装Qt。完成Qt的安装后,您可以构建并运行Qt WebEngine示例来验证编译是否成功。这将把编译好的Qt库文件和头文件安装到之前指定的安装目录中。

DevForge的博客 3016

UVA - 1336 Fixing the Great Wall 记忆化搜索

题目链接:UVA - 1336 最近心情炒鸡差 = = 不过么 也没什么 总会过去的 该做的还是要做的 恩。。教主说的挺对的还是要少看题解多思考。。觉得CF的题目都蛮锻炼脑子的准备刷lrj刷不动的时候做几道那个。 这是调了两天调出来的DP。。。说起来也不算很难吧,毕竟书上有解析,大意就是有个机器人在x点,移动速度v,有n个地方需要修补,给出这些点的位置,立即修补的花费c,以及每过一秒(我忘了是

cout<<"Hello World!"; 723

Python爬虫实战:爬取500+网易云热门歌单,我摸清了全网最火的音乐规律

曲风:流行是主流,“情绪价值”比单纯曲风更重要;歌名:感性、场景化的歌名,更受用户偏爱。这次实战让我明白,Python不是冰冷的代码,而是能帮我们看清生活中隐藏规律的工具。从每天刷的歌单里,用爬虫和数据分析挖出用户的真实偏好,不仅满足了好奇心,还实实在在练会了技能。新手朋友可以从这个项目入手,既练习了爬虫基础,又学会了数据分析的核心逻辑,还能结合自己的音乐兴趣理解数据的意义。现在打开PyCharm,跟着代码跑一遍,你也能从网易云的热门歌单里,挖出属于自己的“音乐规律”!

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1888

SAP-ABAP:SAP库存管理核心增强:IF_EX_MB_DOCUMENT_BADI 深度解析

SAP库存管理核心增强:IF_EX_MB_DOCUMENT_BADI 深度解析

baidu_35680696的博客 1446

例题 9-21 修缮长城(Fixing the Great WALL, ACM/ICPC CERC 2004, UVa1336)

原题链接:https://vjudge.net/problem/UVA-1336 分类:区间DP 备注:记忆化搜索 注意一定要加floor,否则会WA。 #include <bits/stdc++.h> using namespace std; typedef long long LL; const int N = 1010; struct Node { double x, c, d; bool operator < (const Node& rhs) const {

TK_wang_的博客 337

基于单片机设计的智能消防排烟窗控制系统_422

随着城市化进程的不断加快,高层建筑、大型商业综合体以及地下空间的数量迅速增加,建筑内部结构日趋复杂,一旦发生火灾,烟雾和有毒气体往往比明火更具威胁性。大量研究表明,在火灾事故中,人员伤亡的主要原因并非直接烧伤,而是由于吸入烟雾及一氧化碳等有毒气体导致窒息。因此,如何在火灾初期快速排烟、降低有害气体浓度,并及时进行预警,成为现代消防系统设计中的关键问题。传统的消防排烟系统多依赖人工操作或简单的联动控制方式,存在响应滞后、自动化程度低、信息反馈不及时等问题。在实际应用中,当火灾发生时,如果不能第一时间开启排烟窗

367

UVA1336 Fixing the Great Wall && 洛谷P2466 [SDOI2008]Sue的小球【区间DP&&记忆化搜索】

Time limit 3000ms 题目大意 长城上有N个地点要修补,给定每个点的位置、初始修复成本,每单位时间增加的成本 给定修补机器人 初始位置及移动速度 求机器人如何移动使得总成本最小 题目分析 将这N个点按位置排序 显然如果一个点走过他再回头修一定不会最优 所以任意时刻已修补的区间一定是连续的 即若当前以修好第llllll~rrrrrr个地点,那么下一个修补的一定是ll−1ll-1l...

niiick 294

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

UVA 1336-- Fixing the Great Wall (区间dp+dfs+思维)

这个周末跟舍友青岛约起,免费旅游了一波、周末回来赶紧做题,但是发现dp4好难。。。题意:有n个缺口,维修机器人速度v,机器人起点x,接着给了n个缺口的位置、初始花费,单位时间增长花费,求维修n个缺口的最小花费思路:这个题感觉是个区间dp了,但是怎么做都超时!看了题解真是涨知识~~dp[l][r][op]:区间[l,r]维修好了,最后停在l(op==0)或r(op==1)的最小花费。然后记忆化搜索、...

AAAAAAAC的博客 281

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Codeforces Round #503 (by SIS, Div. 2) C Elections 暴力枚举贪心

贪心 打的时候思路对 但自己比较菜 码力不足   看了大神的代码 #include&lt;bits/stdc++.h&gt; using namespace std; struct Node{ int p,c; bool operator&lt;(const Node&amp;a)const { return c&lt;a.c; } }node[3005]; int x[3005]; int ...

Bug___Maker的博客 613

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Unix ls 算法入门经典

注意:string.length()返回的是unsign int 值 用于int 参数的函数时候需要强制转换 如本题中的max() 该题中需要自己计算行列  列的要求为尽可能满足60个字符int colum=(60-M)/(M+2)+1;  减去最后一行的M除以其他每行的M-2就是M-2的最多数量 再加上M的1rows=(n-1)/colum+1;   此处是为了向上取整AC代码:#include...

Bug___Maker的博客 607

Codeforces Round #507 (Div. 1) B. Subway Pursuit 交互题

脑洞交互题   给出范围 系统会返回 yes no 来表示列车是不是在该范围内 二分范围  然后范围差不多了 猜一下范围里面的一个点 然后继续二分范围 直到猜对   注意可以用cout&lt;&lt;endl清理缓存区 #include&lt;bits/stdc++.h&gt; using namespace std; typedef long long ll; int main(){ s...

Bug___Maker的博客 545

筛法求Phi

void phi_table(int n){ for(int i=2;i&lt;=n;i++)phi[i]=0;//先初始化所有为0 phi[1]=1;//小于等于1且与1互质的数 初始化为1 for(int i=2;i&lt;=n;i++)if(!phi[i])//如果这个数没有被改变过 说明这个数 i为素数 for(int j=i;j&lt;=n;j+=i){ if(!phi[j])...

Bug___Maker的博客 467

Codeforces Round #507 (Div. 1)C. Network Safety

题意:给个n个点 m条边的图  每个点有个权值c 范围(0,2^k-1) 如果边的两个定点的权值不同 那么他们的连接就是安全的   现在有一个病毒  他的值x 在上述范围内随机   存在一个集合 &lt;set&lt;int&gt;,int&gt;前面 是点集 后面病毒值x  如果 x感染了 前面的点集的所有点后  (攻击就是  c=c^x)原来的连接仍然是安全的  就是合法的  让你求有多少个合...

Bug___Maker的博客 435

Irrelevant Elements UVA - 1635 二项式定理+唯一分解定理

 n个数 一层一层往下加就会形成类似杨辉三角形的形状 到了最后一行 系数呈现二项式定理分布 从 C(n-1,0)到C(n-1,n-1) 又因为m至少为2 所有C(n-1,0) C(n-1,n-1)可以不用算  又因为公式C(n,k)=(n-k+1)/kC(n,k-1)可用用递推关系算 只要在前一个的基础上乘以那个递推系数     #include&lt;bits/stdc++.h&gt; u...

Bug___Maker的博客 432

Photo of The Sky 数学

题意 给出2*n个 值 可以任意构成(x,y)的点 找出一种组合 使得一个矩形可以框住所有的点并且矩形最小 可以简化成把2*n个值分成一个X集合和一个Y集合 先把a数列排序 分两种情况 1.数列的最大值和最小值在一个集合中 例如在X集合中  此时矩形的一条边为(xmax-xmin)已确知 即已经排序的数列的a[2*n-1]-a[0]  Y的边的值应该由Y确定 因为要包含在矩形里 所以要选择连...

Bug___Maker的博客 404

Lattice Animals UVA - 1602 set判重+打表+模拟

对紫书的代码加了注释,参考了 https://blog.youkuaiyun.com/ecnu_lzj/article/details/52830231的文章  主要是模块化各个功能、打表的思想 SET判重的思想 和标准化联通块的思想     // UVa1602 Lattice Animals // Rujia Liu #include&lt;cstdio&gt; #include&lt;cstri...

Bug___Maker的博客 399

Codeforces Round #501 (Div. 3) Stars Drawing

题意  图中的*是否可以由 十字形的* 覆盖  (组成的十字架必须是从中心出发上下左右长度一样)十字架相互之间可以覆盖重叠    也就是两十字架可以公用边      这题简单和复杂两个版本都能暴力过去 就是遍历一遍数组 把每个十字架找出来然后标记一下  最后便利一下看有没有没有被标记到的* #include&lt;bits/stdc++.h&gt; using namespace std; c...

Bug___Maker的博客 399

Firetruck UVA - 208 双向DFS

回溯搜索题 不能裸搜,因为有终点和起点不连通的情况  可以从终点DFS一次找出联通标记出后再用DFS回溯出来  也可以用并查集( 但是写并查集好累啊!) 还有输出格式有点坑,1前面是没空格的 #include&lt;bits/stdc++.h&gt; using namespace std; int n; vector&lt;int&gt;a1[300]; int vis[25]; int l...

Bug___Maker的博客 387

UVA - 1588 换低挡装置

思路:模拟题 注意下标i+j 和j的对应字符串的匹配关系  注意要模拟从最左边到最右边 刚开始做莫名其妙WA,检查不出错误,后面重写了才过的AC代码:#include&lt;cstring&gt; #include&lt;iostream&gt; #include&lt;cstdio&gt; using namespace std; char s1[105],s2[105]; //用字符串读方便...

Bug___Maker的博客 378
上一篇: Dropping water balloons UVA - 10934 dp 有点难想
下一篇: Bigger is Better UVA - 12105 dp
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值