题目:

解题报告:

看数据范围,应该是个n^3的dp。

但是刚开始觉得二维就可以写。

但是G了,因为无法根据定义的状态判断从[i]到[i+1]的速度是多少。我这直接默认是d[i]了,但是显然不一定是。

然后感觉欸,我是不是可以,还是【dp[i][j]代表跑到第i个,并且拆了j个牌子的最短时间】,这样定义状态,但是转移的时候再加一个遍历,从前面找到用时最少的转移过来,但是还是不对啊,局部最优解不代表全局最优解啊,这个速度不一定是全局最优解的速度啊

    for(int i = 1; i<=n; i++) {dp[i][0] = dp[i-1][0] + (d[i]-d[i-1])*a[i];for(int j = 1; j<=k; j++) {dp[i][j] = dp[i-1][j] + (d[i]-d[i-1])*a[i];// 不拆for(int s = 1; s<=i-1; s++) {// 拆第s个dp[i][j] = min(dp[i][j], dp[s][j] + (d[i]-d[s])*a[s]);}}}

其实我这个转移方程也不对,如果你想表示决策是:【把[s+1, i-1]都拆掉】,那还可以考虑这样的转移框架(dp[i]从dp[s]转移过来)。但是如果决策是【只考虑拆一个牌子】那肯定是用dp[i]从dp[i-1]转移的框架。

所以老老实实三维dp,dp[i][j][s]代表跑到第i个位置,拆了j个,并且到位置i时的速度是a[s],的最小时间花费。时间复杂度O(n^3),空间复杂度O(n^3)

然后代码如下:

#include<bits/stdc++.h> using namespace std;
#define ll long long
ll dp[2][505][505];// dp[i][j][s]代表跑到i个立牌,并且拆了j个立牌,最后速度是a[s]的最少用时ll d[505], a[505];
ll n,l,k;
const ll INF = 1e16;
int main( )
{cin>>n>>l>>k;for(int i = 1; i<=n; i++) cin>>d[i];d[n+1] = l;for(int i = 1; i<=n; i++) cin>>a[i];memset(dp, 0x3f, sizeof(dp));//第2个柱子dp[0][0][1] = (d[2]-d[1])*a[1];// dp[i][j][s] 跑到第i个,拆了j个,以s的速度跑的。//如何确定自己dp设定状态是带有冗余状态的。for(int i = 3; i<=n+1; i++) {memset(dp[idx], 0x3f, sizeof(dp[idx]));for(int j = 0; j<=k; j++) {// 不删第i-1个 ,只有这种情况第三维才是i-1,其他情况第三维都<i-1ll mx = INF;for(int s = 0; s<=i-2; s++) mx = min(mx, dp[i-1][j][s]);dp[i][j][i-1] = mx + (d[i]-d[i-1])*a[i-1];// 以第i-1的速度if(j == 0) continue;//必删第i-1个for(int s = 0; s<i-1; s++) {// 以第s个的速度过来dp[i][j][s] = dp[i-1][j-1][s] + (d[i]-d[i-1])*a[s];// 以第[0,i-2]速度// dp[i][j][s] = dp[s][j-1][s] + (d[i]-d[s])*a[s]; 注意这里不能是s,第一维都必须是i-1}}}ll ans = INF;for(int i = 0; i<=n; i++) {ans = min(ans, dp[(n+1)%2][k][i]);}cout << ans << endl;return 0;
}

然后发现数组开不了这么大,滚动优化一下:时间复杂度O(n^3),空间复杂度O(n^2)

AC代码:

#include<bits/stdc++.h> using namespace std;
#define ll long long
ll dp[2][505][505];// dp[i][j]代表从i开始跑,并且拆了j个立牌的最少用时ll d[505], a[505];
ll n,l,k;
const ll INF = 1e16;
int main( )
{cin>>n>>l>>k;for(int i = 1; i<=n; i++) cin>>d[i];d[n+1] = l;for(int i = 1; i<=n; i++) cin>>a[i];memset(dp, 0x3f, sizeof(dp));//第2个柱子dp[0][0][1] = (d[2]-d[1])*a[1];// printf("dp[%d][%d][%d]=%lld\n", 2,0,1, dp[0][0][1]);// dp[i][j][s] 跑到第i个,拆了j个,以s的速度跑的。//如何确定自己dp设定状态是带有冗余状态的。for(int i = 3; i<=n+1; i++) {int idx = i%2;int idx2 = 1-idx;memset(dp[idx], 0x3f, sizeof(dp[idx]));for(int j = 0; j<=k; j++) {// 不删第i-1个 ,只有这种情况第三维才是i-1,其他情况第三维都<i-1ll mx = INF;for(int s = 0; s<=i-2; s++) mx = min(mx, dp[idx2][j][s]);dp[idx][j][i-1] = mx + (d[i]-d[i-1])*a[i-1];// 以第i-1的速度// printf("dp[%d][%d][%d]=%lld\n", i,j,i-1, dp[idx][j][i-1]);if(j == 0) continue;//必删第i-1个for(int s = 0; s<i-1; s++) {// 以第s个的速度过来dp[idx][j][s] = dp[idx2][j-1][s] + (d[i]-d[i-1])*a[s];// 以第[0,i-2]速度// printf("dp[%d][%d][%d]=%lld\n", i,j,s, dp[idx][j][s]);}}}ll ans = INF;for(int i = 0; i<=n; i++) {ans = min(ans, dp[(n+1)%2][k][i]);}cout << ans << endl;return 0;
}

总结:

注意这题的几个细节点:

1、因为最后一个立牌不是终点,所以需要把终点当做第n+1个立牌。这样dp直接到n+1

2、注意这题初始化需要初始化dp[1]和dp[2],然后从3开始递推。

【19周-星耀】FASTER!FASTER!FASTER!相关推荐

  1. 互联网晚报 | 8月24日 星期二 | 京东二季度收入2538亿元;小米7亿元成立公寓管理公司;荣耀上线新零售平台“星耀商城”...

    今日看点 ✦ 小米回应"7亿元成立公寓管理公司":是员工公寓,增强员工幸福感 ✦ 京东集团二季度营收2538亿元.经营利润3亿元,活跃购买用户数达5.32亿 ✦ 荣耀旗下新零售电商 ...

  2. 热血传奇之周星弛[转载]【出处:未知】

    盛大传奇史诗巨作,根据红花<半夜猪叫>改编 周星驰最近大片<石墓凌凌漆> 剧情简介--关于游戏在人生中所占的位置,不同的人可能具有不同看法,有人视人生如游戏,对什么都无所谓(见 ...

  3. 超市收银程序_超市收银系统案例|千平超市再开2家,星耀助力门店年关创收...

    思迅天店星耀版收银系统案例_超市收银系统:千平超市再开2家,星耀助力门店年关创收 年关冲刺,收银压力,库存管理...... 都是现在超市老板们的工作重点 近期开业 横溪购物中心和汇隆购物广场 妥妥的千 ...

  4. 红魔游戏手机6S Pro星耀白版开启预约:4399元起10月15日正式首销

    9月6日,新一代游戏手机红魔6S Pro发布,该机配备165Hz超竞屏,搭载骁龙888 Plus旗舰处理器,提供有耀影黑.星耀白.氘锋透明版三款配色可供选择,受到了不少电竞爱好者的关注,不过此前仅有耀 ...

  5. 超市收银程序_思迅天店星耀版收银系统助力超市商品建档!

    生活超市商品种类多.建档麻烦是每一个生活超市都会遇到的问题,曾经为了解决这一问题,只得让工作人员抄录,耗时又耗力,工作效率还低.如今,有了超市收银系统,只需上线一款思迅天店星耀版收银系统,商品种类多. ...

  6. 星加坡php开发_新加坡樟宜机场新地标-星耀樟宜 | 贝诺Benoy

    机场永远是个繁忙的地方,甚至可以说,繁忙程度前所未有.近年来,航空客运需求的年增长率大幅上升,从2008年的2.4%增至2017年的7.5%,[1]全球乘客总人数预计将从2016年的77亿人次上升至2 ...

  7. 北京智和信通受邀出席2022IT运维大会,荣获“2022智能运维星耀榜最具影响力企业”

    9月8日,由IT运维网.<网络安全和信息化>杂志社联合主办的"2022(第十三届)IT运维大会"在北京辽宁大厦成功举办.大会以"智慧先行,运维有术" ...

  8. python目前版本强势英雄_王者荣耀:分析S10星耀局以上一些强势英雄及版本目前排位的形势...

    大家好,我是小西 . 首先,从前些日子开始,基本可以说从星耀1往上走,就不要adc了,哪边选ADC,哪边就容易输(这个没有反对的吧大家) 大家别看那些强势战士都已经削了一轮,在高端局,ADC一直以来都 ...

  9. 华为nova7星耀版和华为nova7普通版 的区别 哪个好

    华为nova7星耀版与普通版最大的区别就是星耀版拥有定制的蜜语红配色,并且机身logo也不是传统的华为logo. 华为手机爆降600这活动太给力了 机会不容错过 https://www.huawei. ...

最新文章

  1. 基于改进SURF算法的实时视频拼接
  2. NLP深度学习:基于TensorFlow实现Skip-Gram模型
  3. Redis 热 Key 发现以及解决办法
  4. 使用Spring-hadoop小结
  5. 文件上传~Uploadify上传控件~续(多文件上传)
  6. Linux学习总结(50)——grep查看打印匹配的下几行或前后几行使用总结
  7. django解决页面跳转问题
  8. 【编程】常见概念的理解 —— inplace、vanity url、vanilla(code/software)、编译、链接、build、(delegate、proxy)
  9. 哈工大SCIR Lab | EMNLP 2019 结合单词级别意图识别的stack-propagation框架进行口语理解...
  10. centos nginx和tomcat集群
  11. Hadoop报错 Failed to locate the winutils binary in the hadoop
  12. amd核芯显卡控制面板自定义分辨率_电脑显示器分辨率超频教程:1080P超2K分辨率的方法...
  13. 美图秀秀java代码,【Java】SpringMvc整合美图秀秀M4(头像编辑器)
  14. Latex中文简历制作
  15. matlab二维插值绘制地貌图
  16. 上周刚号召加班,这周立马双休,董明珠把互联网玩明白了……
  17. 梅特勒托利多xk3124电子秤说明书_托利多电子秤设置说明
  18. sht30 linux示例代码,SHT30 Linux标准 i2c-dev 读取程序
  19. 最小二乘法拟合椭圆——MATLAB和Qt-C++实现
  20. 网络基础之为了安全而诞生的NAT(网络地址转换)

热门文章

  1. woed未响应文件没保存,解决办法
  2. keil5工程 AC5 编译器升级 AC6编译器
  3. 人工智能——课程论文
  4. tiktok直播代运营关注要素
  5. 关于解决Ubuntu下apt-get的Unmet dependencies依赖错误
  6. Git操作流程(非常详细)
  7. Word文字中如何快速复制粘贴文字内容
  8. open函数里的newline
  9. mysql隔离级别 isolation_MySQL事务和隔离级别
  10. 用Matlab实现蒙特卡洛法求心形线面积