首页 > 其他分享 >P1874 快速求和

P1874 快速求和

时间:2024-05-08 13:37:52浏览次数:13  
标签:P1874 求和 pluses pos int ans now 快速 left

原题链接

题解

细节很多,看代码

code

#include<bits/stdc++.h>
using namespace std;
string s;
int num;
int vis[55][100005]={0};
int ans[55][100005]={0};
int sou(int pos,int left)//以pos为开头到结尾的数是否能够等于left,如果能需要几个加号
{
    if(vis[pos][left]) return ans[pos][left];//记忆化搜索
    vis[pos][left]=1;


    int now=0;
    for(int i=pos;s[i];i++)
    {
        now=now*10+s[i]-'0';
        if(now>=1e8) break;//防止溢出,只要证明剩下的数字能大于left就好了
    }

    //printf("pos:%d  left:%d  now:%d\n",pos,left,now);
    if(left>now)
    {
        ans[pos][left]=-1;
        return -1;//代表不可能
    }
    if(left==now)
    {
        ans[pos][left]=0;
        return 0;//需要零个加号
    }


    int sum=0;
    int pluses=2e9;
    for(int i=pos;i<s.size()-1;i++)//放+号的位置
    {
        sum=sum*10+s[i]-'0';
        if(sum>left)break;//一是防止溢出,二是防止无效搜索
        int cnt=sou(i+1,left-sum);
        if(cnt>=0) pluses=min(cnt+1,pluses);
    }
    ans[pos][left]=(pluses==2e9?-1:pluses);
    return ans[pos][left];
}
int main()
{
    cin>>s>>num;

    cout<<sou(0,num)<<"\n";
    return 0;
}

标签:P1874,求和,pluses,pos,int,ans,now,快速,left
From: https://www.cnblogs.com/pure4knowledge/p/18179455

相关文章

  • 快速幂
    快速幂暴力解法基本思路:对于n组数据,分别循环b次求出a^bmodp#include<iostream>usingnamespacestd;intmain(){ intn;cin>>n;while(n--){ inta,b,p;longlongres=1;cin>>a>>b>>p;while(b......
  • 快速排序
    快速排序快排模板(以j为分界)快排属于分治算法,分治算法都有三步:1.分成子问题2.递归处理子问题3.子问题合并voidquick_sort(intq[],intl,intr){//递归的终止情况if(l>=r)return;//第一步:分成子问题 inti=l-1,j=r+1,x=q[1+r>>......
  • 如何快速掌握d3js
    D3.js是一个强大的JavaScript库,用于使用HTML、SVG和CSS生成数据可视化。学习D3.js需要一定的JavaScript、HTML和CSS基础。以下是一个为期四周的快速掌握D3.js的学习计划,分为基础入门、典型用法、原理理解以及进阶用法四个阶段。第一周:基础入门目标:掌握D3.js的......
  • 快速找出存(不存在)在某个(或多个)文件的文件夹
    首先,需要用到的这个工具:度娘网盘提取码:qwu2蓝奏云提取码:2r1z想要找出有下面这个文件存在的文件夹切换到批量文件复制版块,快捷键Ctrl+5右侧,搜索添加选定范围,勾选搜索文件夹、包含子目录下面就把要存在文件(夹)的条件拖入进去,就会出现路径,再点击开始搜索等待工具提示搜......
  • 构造照亮世界——快速沃尔什变换 (FWT)
    博客园我的博客快速沃尔什变换解决的卷积问题快速沃尔什变换(FWT)是解决这样一类卷积问题:\[c_i=\sum_{i=j\odotk}a_jb_k\]其中,\(\odot\)是位运算的一种。举个例子,给定数列\(a,b\),求:\[c_i=\sum_{j\oplusk=i}a_jb_k\]FWT的思想看到FWT的名字,我们可以联想到之前学过......
  • 通义灵码实战系列:一个新项目如何快速启动,如何维护遗留系统代码库?
    作者:别象进入2024年,AI热度持续上升,翻阅科技区的文章,AI可谓是军书十二卷,卷卷有爷名。而麦肯锡最近的研究报告显示,软件工程是AI影响最大的领域之一,AI已经成为了软件工程的必选项,也有研究称开发者每天的事务性工作可能占到了七成左右,比如单侧编写等,而这部分恰好是AI所擅长......
  • 通义灵码实战系列:一个新项目如何快速启动,如何维护遗留系统代码库?
    作者:别象进入2024年,AI热度持续上升,翻阅科技区的文章,AI可谓是军书十二卷,卷卷有爷名。而麦肯锡最近的研究报告显示,软件工程是AI影响最大的领域之一,AI已经成为了软件工程的必选项,也有研究称开发者每天的事务性工作可能占到了七成左右,比如单侧编写等,而这部分恰好是AI所擅长......
  • 快速查询自己哔哩哔哩账号的注册时间
    登录自己哔哩哔哩访问下面地址https://member.bilibili.com/x2/creative/h5/calendar/event?ts=0打开后,在网页中查找“jointime”,jointime,“加入时间”,如下图,“jointime”冒号后面的一串数字,是时间戳,时间戳转换把这串数字复制下来,在网上找一个“unix时间戳转换”工具,http:......
  • 如何根据二叉树遍历结果快速绘制二叉树
    一、已知前序遍历和中序遍历(1)前序遍历(根结点--->左子树--->右子树)ABDGHCEIF(2)中序遍历(左子树--->根结点--->右子树)GDHBAEICF注意:在最后连接二叉树时,注意先完玩左子树,再连右子树二、已知前后序遍历和中序遍历(1)后序遍历(左子树--->右......
  • 二叉树进阶:二叉搜索树、平衡二叉树、KD树(实现KNN算法的快速寻找k个邻居)
    二叉搜索树二叉搜索树又称为二叉排序树、二叉查找树。请记住,本篇所介绍的所有树,都是二叉搜索树,也就是说都用到了二分查找的思想。二叉搜索树的特征:每个结点的左结点都小于结点本身,右结点都大于结点本身。用中序遍历来遍历一棵二叉搜索树,结果必然是有序的。时间复杂度很低......