首页 > 其他分享 >P9769 HUSTFC 2023 简单的加法乘法计算题 题解

P9769 HUSTFC 2023 简单的加法乘法计算题 题解

时间:2023-10-25 16:36:34浏览次数:37  
标签:ch 计算题 int 题解 P9769 ret read maxn

动态规划 #单调队列

Question

给出一个 \(x=0\) 通过一些操作把 \(x\) 变成 \(y\) 。有两个集合 \(A,B\) 。 \(A\) 包含了 \(n\) 个元素,分别是 \(1-n\) 的所有正整数,集合 \(B\) 给出 \(m\) 个元素,可以进行一下函数

  • 选择 \(A\) 中的一个元素 \(a\) ,令 \(x\) 加上 \(a\)
  • 选择 \(B\) 中的一个元素 \(b\),令 \(x\) 乘 \(b\)

求最少次数

Solution

显然动态规划,定义 \(F[i]\) 表示数值为 \(i\) 时的最小步数

思考转移方程

\[F[i]=min(F[j]+1,F[k]+1),j \in [i-N,i-1],k | i \]

对于 \(F[j]\) 的最小值,用单调队列就好了

Code

#include<bits/stdc++.h>
using namespace std;
const int maxn=5e6+5;
int X,Y,M,N,a[maxn],F[maxn];
//F[i] 表示前数字为 i 的时候需要的最小次数
inline int read(){
    int ret=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-f;ch=getchar();}
    while(ch<='9'&&ch>='0')ret=ret*10+ch-'0',ch=getchar();
    return ret*f;
}
int Q[maxn],hed,til;
int main(){
    // freopen("P9769.in","r",stdin);
    // freopen("P9769.out","w",stdout);
    X=0;Y=read();N=read();M=read();
    for(int i=1;i<=M;i++)
        a[i]=read();
    memset(F,63,sizeof F);
    F[X]=0;Q[++til]=0;
    for(int i=X+1;i<=Y;i++){
        for(int j=1;j<=M;j++)if(i%a[j]==0){
            F[i]=min(F[i],F[i/a[j]]+1);
        }
        
        while(hed<=til&&Q[hed]<i-N)
            hed++;
        if(hed<=til)
            F[i]=min(F[i],F[Q[hed]]+1);
        while(hed<=til&&F[i]<=F[Q[til]])
            til--;
        Q[++til]=i;
    }
    printf("%d\n",F[Y]);
    return 0;
}

标签:ch,计算题,int,题解,P9769,ret,read,maxn
From: https://www.cnblogs.com/martian148/p/17787514.html

相关文章

  • CF1555B题解
    分析放桌子有两种放法,一种是上下放,一种是左右放,分别计算最小值取\(\min\)即可。注意到原题使用的是平面直角坐标系,于是将原图顺时针旋转\(90^{\circ}\),将下标表示方式与代码中下标的表示方式统一,相应的,左下角和右上角也变成了左上角和右下角。代码#include<iostream......
  • Kettle链接SqlServer+Jdk8 问题解决
     这两天要弄个ldap对接,客户端server2016,数据库那边winserver2008,数据库也是2008最开是链接出现类似这样的,更换了链接mssql的Jar版本,从12换到了6的老版本,没用。  后来更改网上提示的  C:\ProgramFiles\Java\jre-1.8\lib\security\java.security文件jdk.tls.......
  • B1024 题解
    本着10月杂题题解只记重量级的原则,再加上这个系列好久没更新了,搞一发。原题链接发挥还可以的一场,至少比csp-s发挥的好。T1智慧概率题,考场差点出来,30pts。T2简单计数题,之前几场都卡T2,终于出来一次,100pts。T3简单数据结构题,打的30pts暴力,但是有50pts。T4智慧......
  • CF1572F Stations 题解-Segment Tree Beats
    20231025CF1572FStations题解-SegmentTreeBeats吉司机线段树好题!!!CF3400。传送门Statement有\(n\)个广播站,第\(i\)个广播站高度为\(h_i\),范围为\(w_i\)。初始\(h_i=0,w_i=i\)。广播站\(i\)能向广播站\(j\)传递消息,当且仅当\(i\lej\lew_i\),且\(h_i>\max\lim......
  • 恨7不成妻题解
    恨7不成妻题解分析数位\(DP\)考虑题目中的两个条件,每一位不等于\(7\)直接枚举时把\(7\)排除,其他两种情况直接放在状态里。因为题目要求平方和,我们考虑每次加上一位(设加入的是第\(i\)位)时会发生什么设原平方和为\[\sum_{k=1}^ta_k^2\]加入一位\(p\)之后每个数......
  • P9771 HUSTFC 2023 排列排序问题 题解
    Question给出一个\(N\)个元素的排序\(a\),我们可以对排列进行一些操作将这个排列切割成若干个序列将其中一些序列翻转将这些序列连接起来得到一个新的排列需要让最后的排列有序Solution这个题的描述有点小问题理解应该是切一次,然后再反转合并,不可能会先合并再切再反转......
  • P9744 「KDOI-06-S」消除序列 题解
    @目录DesciptionSolutionCodeDesciption给定一个长度为\(i\)的序列\(v_1,v_2,\dots,v_n\),初始时所有元素的值都为\(1\)。对于下标\(i\)有\(3\)种操作:将\(v_1,v_2,\dots,v_i\)的值变为\(0\),费用是\(a_i\)。将\(v_i\)的值变为\(0\),费用是\(b_i\)。将\(v_i\)......
  • Meta Hacker Cup 2023 Round 1 题解
    ProblemA:HereComesSantaClaus给一个数列,要求分成若干组,要求每组至少2个数,使得所有组中位数的最大值与最小值之差尽量大,求这个值。#include<bits/stdc++.h>usingnamespacestd;#defineFor(i,n)for(inti=1;i<=n;i++)#defineFork(i,k,n)for(inti=k;i<=n;i++)#define......
  • pytest运行警告问题解决:DeprecationWarning: pkg_resources is deprecated as an API
    前言最近在运行pytest的时候,经常出现这个警告DeprecationWarning:pkg_resourcesisdeprecatedasanAPISeehttps://setuptools.pypa.io/en/latest/pkg_resources.htmlfrompkg_resourcesimportiter_entry_points从警告上看是方法被弃用,肯定是因为新版弃用了旧版的语法。遇......
  • szfpga Lattice高速下载器HW-USBN-2B 常见问题解答
      .产品特点     1).支持windows7,Windows10操作系统,两个操作系统非常稳定不断线。  2).支持JTAG模式,速度快,最高30Mb/s,调试serdescore,不会像hw-usbn-2a出现错误。如这种错误Error:failedtosetcablepor(cable:USBport:EzUSB-0error:-1)  3). ......