UVA 1336 Fixing the Great Wall(区间DP)

博客介绍了UVA 1336问题,涉及修复长城上的n个损坏点。每个损坏点的修复费用由成本ci和时间t决定,即ci+t*di。目标是最小化所有损坏点修复的总费用。通过定义dp[i][j][k]表示修复区间i到j并停留在左侧或右侧的最小费用,博主探讨了如何利用区间动态规划解决问题,并提到了记忆化搜索的实现方式。文章最后提供了AC代码。
摘要由CSDN通过智能技术生成

题意:修长城n个损坏点,每个损坏点在时刻t被修,那么费用就是ci+t*di,问修完每个损坏点的最小费用。

状态很好想,因为是一条直线,所以dp[i][j][k]代表区间i到j维修完停在左或右(k对应0和1)的最小费用,其他没有维修的d费用也一起累加进来,这样就不用管时间了。递推的话分2种情况,往左走和往右走。

但是递推的方向是个问题,记忆化搜索肯定可以。假设机器人原来的位置在x处,那么第一维应该是从x->0,第二维应该是x->n,因为我们很容易可以发觉DP递推是从中间往外扩张的。

AC代码:

//#pragma comment(linker, "/STACK:102400000,102400000")
#include<cstdio>
#include<ctype.h>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<vector>
#include<cstdlib>
#include<stack>
#include<cmath>
#include<queue>
#include<set>
#include<map>
#include<ctime>
#include<str
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值