Educational Codeforces Round 122 (Rated for Div. 2) D. Make Them Equal
admin
2024-03-15 23:10:25
0

Problem - D - Codeforces

题意:

给定三个数组a,b,c,其中a数组一开始为1,b和c数组是给定的。

对于每次操作,都可以选定一个i,使a[i]=a[i]+a[i]/x

操作最多执行k次

经过若干次操作后,若a[i]==b[i],则可以获得c[i]的价值

问可以获得的最大价值是多少

思路:

有限制的价值问题,考虑做01背包

因此我们要去确定v[i]和w[i]的值

很显然在这道题中,w[i]=c[i]

因此我们去看v[i]的值,即a[i]从1变到b[i]的最少步数是多少

一开始想的是贪心,先一直取x=1,这样的话就相当于是二进制往上跳,但是这样的话,等我们跳到快超过b[i]的最后一步时,是否存在x使得a[i]+a[i]/x==b[i]这件事是难以判断的,因此这样的思路可以排除

因为要求最少步数,所以应该要想到求BFS最短路,而且这道题的数据范围很小,因此求最短路的思路更为合理

我们去预处理最短路数组dis,表示从1到b[i]的最短路的长度,这样v[i]的值就相当于是dis[b[i]]的值

求出v[i]之后去跑一边01背包即可

需要注意我们从1经过操作后变成b[i]的最少步数最多也就12步(二进制),所以总操作步数取min(12*n,k)即可

这道题思路较为自然,但是最短路那一步还是没有想到

Code:

#include 
using namespace std;
#define int long long
const int mxn=1e3+10,mxe=2e5+10,mnf=1e18;
queue q;
int n,k;
int b[mxn],c[mxn],dp[mxn*12],v[mxn],dis[mxn];
void solve(){memset(dp,0,sizeof(dp));cin>>n>>k;k=min(k,12ll*n);for(int i=1;i<=n;i++) cin>>b[i];for(int i=1;i<=n;i++) cin>>c[i];for(int i=1;i<=n;i++) v[i]=dis[b[i]];for(int i=1;i<=n;i++){for(int j=k;j>=v[i];j--) dp[j]=max(dp[j],dp[j-v[i]]+c[i]);}cout<<*max_element(dp,dp+1+k)<<'\n';
}
void init(){memset(dis,0x3f,sizeof(dis));dis[1]=0;q.push(1);while(!q.empty()){int u=q.front();q.pop();for(int x=1;x<=u;x++){int v=u+u/x;if(v<=1e3&&dis[v]>dis[u]+1){dis[v]=dis[u]+1;q.push(v);}}}
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T=1;cin>>T;init();while(T--)solve();return 0;
}

总结:

1.如果我们要去跑01背包的话,先去确定它v[i]和w[i]的值

2.求最少步数应当想到最短路

相关内容

热门资讯

【MySQL】锁 锁 文章目录锁全局锁表级锁表锁元数据锁(MDL)意向锁AUTO-INC锁...
【内网安全】 隧道搭建穿透上线... 文章目录内网穿透-Ngrok-入门-上线1、服务端配置:2、客户端连接服务端ÿ...
GCN的几种模型复现笔记 引言 本篇笔记紧接上文,主要是上一篇看写了快2w字,再去接入代码感觉有点...
数据分页展示逻辑 import java.util.Arrays;import java.util.List;impo...
Redis为什么选择单线程?R... 目录专栏导读一、Redis版本迭代二、Redis4.0之前为什么一直采用单线程?三、R...
【已解决】ERROR: Cou... 正确指令: pip install pyyaml
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
Lock 接口解读 前置知识点Synchronized synchronized 是 Java 中的关键字,...
Win7 专业版安装中文包、汉... 参考资料:http://www.metsky.com/archives/350.htm...
3 ROS1通讯编程提高(1) 3 ROS1通讯编程提高3.1 使用VS Code编译ROS13.1.1 VS Code的安装和配置...
大模型未来趋势 大模型是人工智能领域的重要发展趋势之一,未来有着广阔的应用前景和发展空间。以下是大模型未来的趋势和展...
python实战应用讲解-【n... 目录 如何在Python中计算残余的平方和 方法1:使用其Base公式 方法2:使用statsmod...
学习u-boot 需要了解的m... 一、常用函数 1. origin 函数 origin 函数的返回值就是变量来源。使用格式如下...
常用python爬虫库介绍与简... 通用 urllib -网络库(stdlib)。 requests -网络库。 grab – 网络库&...
药品批准文号查询|药融云-中国... 药品批文是国家食品药品监督管理局(NMPA)对药品的审评和批准的证明文件...
【2023-03-22】SRS... 【2023-03-22】SRS推流搭配FFmpeg实现目标检测 说明: 外侧测试使用SRS播放器测...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
初级算法-哈希表 主要记录算法和数据结构学习笔记,新的一年更上一层楼! 初级算法-哈希表...
进程间通信【Linux】 1. 进程间通信 1.1 什么是进程间通信 在 Linux 系统中,进程间通信...
【Docker】P3 Dock... Docker数据卷、宿主机与挂载数据卷的概念及作用挂载宿主机配置数据卷挂载操作示例一个容器挂载多个目...