P1070 [NOIP2009 普及组] 道路游戏

news/2025/2/28 19:46:26/文章来源:https://www.cnblogs.com/yiweixxs/p/18607119

Problem

Solve

此题是求最优解,考虑贪心时会发现这个不满足局部最优->整体最优,故考虑DP
通过输入格式能受到启发,时间可以作为维度之一,所以定义为:
\(f_{i,j}\)第i秒末,机器人在j号工厂能获得的最大金币
因为机器存在时间有上限,所以推的时候枚举本次机器人到底走了多少步,然后从走之前推过来(如图1)
动态转移方程为$$f_{i,j}=max(f_{i-k,j-k}+\sum_{l=0}^{k-1} a_{i-l,j-l}) (k\le p)$$
当然这个仅仅是大部分情况下的版本,有时会从n->1,这种情况将后半部分拆成两个部分即可(如图2)
解为\(max(f_{m,i})(i\le n)\),时间复杂度\(O(nmp)\)

优化

不难发现,我们都在寻找当前时刻近p秒内的最优解,可以使用单调队列
我们给每个对角线建立单调队列,这样就能直接找出最优的位置了,前半部分可以O(1)解决
对于后半部分,我们给每个对角线维护前缀和即可
对角线的编号建议为为i-j,这样可以一一对应,十分方便,具体参照代码,时间复杂度\(O(nm)\)

理论上不加优化的解法是TLE90,但是在洛谷神机+常数优化+O2的情况下能将理论\(10^9\)的计算量压在500ms内,所以代码给出的是理论90+前缀和维护后半部分的写法

Code

#include<bits/stdc++.h>
using namespace std;
int n,m,p,a[1005][1005],b[1005];
int f[1005][1005],s[2005][1005],maxn[1005];
int fg(int j,int k){if((j-k+1000*n)%n==0)return n;return (j-k+1000*n)%n;
}
int fs(int i,int j,int k){int ret=0;if(j-k<0){ret+=s[i-j+1000][i];ret+=s[i-j-n+1000][i-j]-s[i-j-n+1000][i-k];}else if(j==k){ret+=s[i-j+1000][i];}else ret=s[i-j+1000][i]-s[i-j+1000][i-k];ret-=b[fg(j,k)];return ret;
}
int main(){memset(f,-0x3f,sizeof(f));memset(maxn,-0x3f,sizeof(maxn));scanf("%d%d%d",&n,&m,&p);for(int i=1;i<=n;i++)f[0][i]=0;maxn[0]=0;for(int i=2;i<=n;i++){for(int j=1;j<=m;j++){scanf("%d",&a[j][i]);}}for(int j=1;j<=m;j++){scanf("%d",&a[j][1]);}for(int i=1;i<=n;i++){scanf("%d",&b[i]);}for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){s[i-j+1000][i]=s[i-j+1000][i-1]+a[i][j];}}for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){for(int k=1;k<=p;k++){if(i-k<0)break;f[i][j]=max(f[i][j],maxn[i-k]+fs(i,j,k));}maxn[i]=max(maxn[i],f[i][j]);}}int ans=0;for(int i=1;i<=n;i++){ans=max(ans,f[m][i]);}cout<<ans;return 0;
}

图一image
图二image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/852643.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024-12-14:K 周期字符串需要的最少操作次数。用go语言,给定一个长度为n的字符串 word 和一个整数k,k是n的因数。每次操作可以选择两个下标i和j,使得i和j都可以被k整除,然后用从j

2024-12-14:K 周期字符串需要的最少操作次数。用go语言,给定一个长度为n的字符串 word 和一个整数k,k是n的因数。每次操作可以选择两个下标i和j,使得i和j都可以被k整除,然后用从j开始的长度为k的子串替换从i开始的长度为k的子串。要使得word成为一个K周期字符串,需要进行…

实现综合实例:简单文字处软件 (一)

学业繁重,更新缓慢。 本内容主要用于个人学习/复习QT简单入门控件 DAY ONE 创建项目界面设计与开发 实现简单的菜单栏设计本人并没有使用代码实现,而是用于使用UI设计师界面。action条例分类 设计控件(帮助) 设计帮助控件: 我们转到槽,填写如下代码: 这是一个基于QT6实现…

微信防撤回插件

插件 https://pan.quark.cn/s/bb5165185a6a部署 先查看电脑微信版本,比如我这里是3.9.12.15版本下载对应版本之后,将插件名字改为WeChatWin.dll,删掉前面的版本号在微信所在的文件夹下,找到这个同名插件,用下载的插件替换它即可 end 替换之后需要重启微信才可以,效果如下…

事务管理与锁机制

title: 事务管理与锁机制 date: 2024/12/14 updated: 2024/12/14 author: cmdragon excerpt: 在数据库系统中,事务管理至关重要,它确保多个数据库操作能够作为一个单一的逻辑单元来执行,从而维护数据的一致性和完整性。一个良好的事务管理系统能够解决并发操作带来的问题,…

2024-2025-1 20241319 《计算机基础与程序设计》第十二周学习总结

作业信息这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK12这个作业的目标 结构体和数据结构基础 文件操作作业正文 https://www.cnblogs.com/wchxx/p/18607077教材学习内容总结 结构体(Struct…

数据采集综合设计

这个项目属于哪个课程2024数据采集与融合技术实践 组名 从你的全世界爬过团队logo:项目简介 项目名称:博物识植项目logo:项目介绍:在探索自然奥秘的旅途中,我们常与动植物相伴而行,却无法准确识别它们,更难以深入了解他们的特征。为了更好地理解和欣赏自然界的多样性,…

Java中创建线程的几种方式

盘点一下Java中创建线程的几种方式 一、继承Thread类,重写run()方法public class MyThread extends Thread {@Overridepublic void run() {System.out.println("my thread start " + Thread.currentThread().getName());}public static void main(String[] args) {S…

消防通道堵塞识别摄像机

消防通道堵塞识别摄像机是一种安装在建筑物消防通道中的监控设备,主要用于监测消防通道是否被车辆、杂物或其他障碍物所堵塞,以确保在火灾等紧急情况下消防通道畅通无阻。这种摄像机通常安装在消防通道的入口或周围,具备高清摄像功能,能够全天候监测通道状况。一旦摄像机检…

发布你的第一个python包

发布你的第一个python包到pypi网站这里介绍如何将你写的python工具包,打包成whl,并发布到pypi.org网站,使用pip进行安装使用。大致步骤如下:注册测试testpypi.org网站,生成上传的token 注册正式pypi.org网站,生成上传的token 编写代码 规划项目代码目录布局 编写打包文件…

火灾监测识别摄像机

火灾监测识别摄像机是一种基于视觉识别技术的智能设备,旨在实时监测并识别火灾,及时报警并提供相关数据支持,以提高火灾应急响应和减少火灾灾害损失。火灾监测识别摄像机是一种基于视觉识别技术的智能设备,旨在实时监测并识别火灾,及时报警并提供相关数据支持,以提高火灾…

佩戴口罩监测识别摄像机

佩戴口罩监测识别摄像机是一种基于计算机视觉技术的智能监测设备,它能够快速准确地识别出人们是否佩戴口罩,并对佩戴口罩的人员进行识别和记录。这种摄像机在当前抗击病毒的背景下具有重要意义,在公共场所、医疗机构、交通枢纽等地方都有着广泛的应用价值。佩戴口罩监测识别…

随机中文字符生成-python包工具

随机生成中文文字,你指定数量这里介绍一个python工具包,随机生成中文文字,方便中文模型训练及随机中文字符串填充场景。操作如下: pip install chineserand代码示例: from chineserand import raw chinese_words = raw(10) print(chinese_words)项目开源地址: https://gi…