爆刷PAT(甲级)——之【1103】 Integer Factorization (30 分)——DFS+剪枝

PAT甲级真题 1103 Integer Factorization (30分) C++实现(dfs+剪枝+备忘录,经典题目) 题目 The K-P factorization of a positive integer N is to write N as the sum of the P-th power of K positive integers. You are supposed to write a program to find the K-P factorization of N for any positive integers N, K and P. Input Specification: Each inpu 阅读详情

题意:给一个数N(小于400),项数K(小于P),次方P——把数N分解为K项P次方的和的形式。输出时候把系数大的先输出。如果答案有多个,那么选系数和最大的那个;如果还是有多种情况,那么系数更大的那种。(系数必然为正数)

难点:本题就是卡时间。虽然N不会太大,但是K和N一样大,而每一位都有T=pow(N,1/P)的可能,就会爆掉。

思路:1、如果到达K项,所有项加起来不到N肯定不是答案。

2、对于K位的每一位的系数遍历过程,都是由上界的,就是N减去前面定好的系数的项后,剩下的余数rem的开P次根号

由于题目要求输出是选择系数最大的先。所以各项的系数在遍历的时候从上界递减顺序来进行遍历。

到这里交上去还是有两个点超时。

发现一个问题。如果第一项系数是5的P次方,后面出现一个1的P次方的话,就和 “第一项是1的P次方,后面出现5的P次方”重复了。没想好怎么剪枝这一块。于是我以为系数的下界是(剩下的余数rem的开P次根号)的开P根号或除2,但都不正确

3、看到一种方法不错,系数从下界开始往上界遍历,如果是i的话,下一位的系数下界就是从i开始,i之前的不用遍历的。这样就可以解决上述将的重复问题。但是由于输出的时候要将最大的系数先输出,所以最后输出的时候是倒序输出。

完成这三个部分的剪枝以后还只剩下最后一个点难以通过,想必是十分大的运算量。

4、想来想去是C++的pow函数效率太低了。于是手写一个快速幂代替掉这个pow。提交AC,但还是一般般,时间要求1200ms,我的耗时1100ms。。。

看了一下柳神等人的代码,原来是先将 i 的各P次方先打表出来了。。。

 

总结:像这种卡时间的题目做着还挺有意思的。

Code:

#include<bits/stdc++.h>
#include<unordered_map>
using namespace std;
#define inf 409
#define INF 0x3f3f3f3f
#define loop(x,y,z) for(x=y;x<z;x++)

int n,k,p;
int ans_sum;
vector<int>ans(inf);
vector<int>e(inf);
int flag=0;

int myPow(int x,int y)//快速幂
{
    if(!y)return 1;
    int z=myPow(x,y>>1);
    if(y%2)return z*z*x;
    return z*z;
}

void dfs(int pos,int downbound,int rem,int sum)
{
    if(pos==k)//终点
    {
        if(!rem)//余数为0
        {
            flag=1;
            if(sum>=ans_sum){ans_sum=sum;ans=e;}//相等也要更新,因为pos的值i是升序更新
        }
        return;
    }
    if(rem<k-pos)return;//凑不满的,别算了
    int upbound=(int)pow(rem,1.0/p);
    for(int i=downbound;myPow(i,p)<=rem;i++)
    {
        e[pos]=i;
        dfs(pos+1,i,rem-myPow(i,p),sum+i);
    }
}

int main()
{
    cin>>n>>k>>p;
    dfs(0,1,n,0);
    if(!flag)printf("Impossible\n");
    else
    {
        printf("%d = %d^%d",n,ans[k-1],p);
        int i;
        for(i=k-2;i>=0;i--)printf(" + %d^%d",ans[i],p);
        printf("\n");
    }
    return 0;
}

 

Integer Factorization-参考代码 Integer Factorization Time Limit:3000MS Memory Limit:65536K Total Submit:359 Accepted:222 Description 问题描述: 大于1 的正整数n可以分解为:n=X1*X2*…*Xm。 例如,当n=12 时,共有8 种不同的分解式: 12=12; 12=6*2; 12=4*3; 12=3*4; 12=3*2*2; 12=2*6; 12=2*3*2; 12=2*2*3。 编程任务: 对于给定的正整数n,编程计算n共有多少种不同的分解式。 Input 输入由多组测试数据组成。 每组测试数据输入第一行有1 个正整数n (1≤n≤2000000000)。 Output 对应每组输入,输出计算出的不同的分解式数。 Sample Input 12 Sample Output 8 立即下载

相关推荐

告别TI官网迷路!手把手教你用C2000Ware为TMS320F28027搭建Proteus仿真工程模板

本文详细指导如何使用C2000Ware为TMS320F28027搭建Proteus仿真工程模板,帮助DSP开发者快速上手。从资源获取、工程目录设计到关键文件配置,再到CCS与Proteus的联调技巧,全面解析仿真工程搭建的每个步骤,特别适合初学者和工程师参考。

weixin_42715608的博客 472

A1103 Integer Factorization (30 分)(将N表示为K个整数的P次方的和)(DFS)(难)

TheK−Pfactorization of a positive integerNis to writeNas the sum of theP-th power ofKpositive integers. You are supposed to write a program to find theK−Pfactorization ofNfor any positive...

julia7_的博客 770

【学习笔记】《基于φ-OTDR的分布式扰动传感系统定位算法研究-北交-通信与信息系统-吴》重点笔记

一、绪论 1.1 引言 光纤传感器的优点:跟电子传感器相比较,光纤传感器有诸多独特的优势:对电磁干扰免疫;具有很好的绝缘性和耐腐蚀性;灵敏度高,可测量微弱信息;可实现大范围监测和分布式传感,仅需一根传感光纤,更为经济便捷;传感光纤体积小、重量轻、可形变,适用于一些特殊应用场所;还有无需供电、耐高温、便于组网等等优点 光纤传感器的感知信号的方法:当探测光入射到光纤中时会发生散射并产生各种散射光...

qq_36045093的博客 2万+

1103. Integer Factorization (30)-PAT甲级真题(dfs深度优先)

1103. Integer Factorization (30)The K-P factorization of a positive integer N is to write N as the sum of the P-th power of K positive integers. You are supposed to write a program to find the K-P fac...

柳婼 の blog 4036

从踩坑到填平:我在RHEL7上给Tesla A100装驱动的完整记录(含Fabric Manager配置)

本文详细记录了在RHEL7系统上为Tesla A100安装Nvidia驱动的完整过程,包括Fabric Manager配置的关键步骤。通过分析A100架构的特殊性,提供了从驱动安装到服务配置的详细指南,并分享了常见问题的排查方法和性能调优技巧,帮助用户高效部署高性能GPU计算环境。

weixin_29291863的博客 282

新鲜出炉,ECCV2024.9.25 首次提出基于 YOLO 目标检测的无源域自适应

本文提出了首次使用YOLO系列单发探测器的SFDA方法。本文方法采用了一个带有学习的、目标领域特定的增强和一种新的通信机制的师生框架来稳定训练,减少了对模型选择中带注释的目标数据的依赖,这对现实世界的应用至关重要。SF-YOLO 优于所有基于Faster R-CNN的SFDA方法,甚至一些使用源数据的基于UDA yolo的方法。

m0_63294504的博客 2676

PAT A1103 Integer Factorization (30分) (DFS+剪枝)

PAT甲级:A1103 Integer Factorization (30分) The K−P factorization of a positive integer N is to write N as the sum of the P-th power of K positive integers. You are supposed to write a program to find the...

只想用最简短的代码刷题 243

【系统架构设计师-2023年真题】综合知识-答案及详解

要实现多任务间的协同工作,操作系统必须提供任务间的通信手段。嵌入式操作系统一般都会提供多任务间通信的方法,其中()是任务间最直接、最明显的通信方法,也是访问共享的数据结构,即不同的任务都可以访问同一地址空间。()作为一种更高级的通信方式,能够在同一处理器的各个任务间传递任意长度(理论上只受物理内存和机器字长限制)的信息。(1)A. 共享内存 B. Socket C. 消息传递 D. 信号量(2)A. 共享内存 B. Socket C. 消息传递 D. 信号量【答案】A、C关于星型拓扑结构,下列说法正确的是(

数据知道的博客 1万+

*PAT_甲级_1103 Integer Factorization (30point(s)) (C++)【DFS进阶用法】

1,题目描述 Sample Input 1: 169 5 2 Sample Output 1: 169 = 6^2 + 6^2 + 6^2 + 6^2 + 5^2 Sample Input 2: 169 167 3 Sample Output 2: Impossible 题目大意 2,思路 3,AC代码 4,...

&再见萤火虫&的博客 298

Arcgis模型构建器01——写一个简单的模型

在使用模型构建器解决这个需求之前,我们要想清楚如果我们手动解决的话,应该如何去处理,因为构建模型的过程正是基于我们手动处理的过程来构建的。我有一个全国的dem影像数据和一个陕西省边界范围矢量,现在我想获取陕西省的dem影像的坡度数据。填写完之后点击确定,我们发现,两个输入数据和工具连接起来了,并且通过裁剪工具得到一个中间结果,即。我们发现工具框和中间数据框都存在阴影,说明已经运行过了这个模型,不报错就说明模型运行成功!现在我们就把数据和工具都串联起来了,成功构建好了模型。

爱吃雪糕的小布丁的博客 918

Thinkpad可以安装Win11吗?Thinkpad升级Win11教程

win11正式版推出之后,不少用户也想要体验一把新系统,但是不知道thinkpad是否支持win11,其实基本上现在在售的都是可以升级win11的。2、如果大家使用的是老款的ThinkPad,那么可以通过软件来检测自己是否支持win11。【电脑健康状况检查下载】答:在售的ThinkPad都是可以支持win11的,但是部分旧版本不支持。2、这时候想要升级win11的话,就可以通过镜像系统的方式来跳过系统检测。3、如果使用上面的软件检测可以支持win11,那么只要进入“设置”

xhp618的博客 2985

PAT甲级1103 Integer Factorization【dfs】【剪枝】

题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805364711604224 题意: 给定一个数n,要求从1~n中找出k个数,使得这些数的p次方之和等于n 思路: 因为n为400,所以dfs加剪枝【本来还在想dp来着】 他要求输出的方案是数字之和最大的,如果之和相等要输出字典序较大的。 所以还需维护一个...

weixin_30414635的博客 177

【运动规划算法项目实战】全覆盖分区算法

全覆盖规划在机器人学领域具有重要意义,其应用场景涵盖了自动农场、扫地机器人、扫描监视无人机等多个领域。该问题的核心目标是使机器人能够从指定起点出发,规划一条避开障碍物、同时路径尽可能短的轨迹,从而实现对特定区域的全面覆盖。在实际应用中,全覆盖规划的成功实现对于提高机器人在各类环境中的工作效率至关重要。这一问题的解决涉及到高效的路径规划和规划区域分解技术。其中,梯形单元分解算法是一种常用分区的技术,过将地图上需要规划的区域进行分区,采用梯形分解的方式,可以更好地应对复杂环境。全覆盖算法规划流程。

xiewf的博客 1万+

PAT甲级1103 Integer Factorization (30 分)

1103Integer Factorization(30分) TheK−Pfactorization of a positive integerNis to writeNas the sum of theP-th power ofKpositive integers. You are supposed to write a program to find theK−Pf...

Dexter 265

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【PAT 甲级】A1103 Integer Factorization(30分)

【版本一:DFS递归版本,有一个测试点超时,27分】 虽然第一次尝试没有满分,但是超级无敌开心了!!第一次做PAT的压轴题,还好还好… #include <bits/stdc++.h> using namespace std; int tmp[512]; int MAX=-1; int ans[512]; bool flag=false; void DFS(int index,int ...

weixin_42278063的博客 475

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

PAT 甲级 1103 Integer Factorization (30 分)

这题的测试点5从一直超时,然后慢慢改到400ms再改到200ms+,再到现在10几ms,真辛酸啊。。 思路: 1.基本想法就是枚举,暴力解,最开始用的循环做的枚举,后来发现利用递归去做更容易实现剪枝; 2.将[1,n-k+1]区间的整数的p-1次方用数组存储起来,将[1,(n-k+1)1/p]区间的整数的p次方用数组存储起来,以免之后用到时反复计算; 3.然后从下标1到k开始dfs,记录此次递归的...

Yuhan的博客 671

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

pat 甲级 dfs A1103 Integer Factorization (30分)剪枝

1103 Integer Factorization (30分) The K−P factorization of a positive integer N is to write N as the sum of the P-th power of K positive integers. You are supposed to write a program to find the K−P factorization of N for any positive integers N, K and P.

weixin_42358356的博客 206

【PAT甲级】1103 Integer Factorization (30分)

解题过程的小记录,如有错误欢迎指出。 难度:五星(DFS选择满足条件的最优序列) 小导航~题目分析注意点我的解题过程思路bug代码dalao的代码借鉴点 题目分析 找出k个数的p次方之和为n 注意点 最终要找的数列是满足一系列条件的的底数,次方和知识中间寻找所需要的条件 最好在开始的init中就找出所有的<=n的次方数,简化后续的运算 底数从大到小开始找,这样就省去了在出现tie的时候比较的情况,因为从大到小找的时候,先找出的满足的序列,一定是各个数更大的 在进行下一层搜索之前,先看所加在一起的和是

SpicyChicken的自我修养 224

PAT 甲级 ☆1103 Integer Factorization (30分)【dfs + 剪枝】

1103Integer Factorization(30分) TheK−Pfactorization of a positive integerNis to writeNas the sum of theP-th power ofKpositive integers. You are supposed to write a program to find theK−Pfactorization ofNfor any positive integersN,KandP....

qq_18841761的博客 541

浙大 PAT 甲级 1103 Integer Factorization DFS+剪枝

这题的超时弄得我要崩溃了…各种细节处的剪枝,不停剪了很多地方,依然超时。最后用整型数组代替了vector,通过。血泪教训,第二次了,超时的时候把vector换成原生数组会快好几倍。 #include<stdio.h> #include<vector> #include<math.h> #include<memory.h> using namesp...

qq_39115541的博客 315

PAT——1103 Integer Factorization 甲级(dfs+剪枝+快速幂,超详细注解)

1103 Integer Factorization 题目题意AC代码参考 题目 https://pintia.cn/problem-sets/994805342720868352/problems/994805364711604224 题意 需要说明的是,从1到n的数字的p次方只要小于等于n,就都有可能曾为目标因子,而非传统的因子概念 AC代码 #include<bits/stdc++.h> using namespace std; int n,k,p,maxfacSum=-1; vector

ljhsq的博客 356

1103 Integer Factorization(附详细注释,逻辑分析)

写在前面 深度优先搜索(DFS, Depth First Search)是一个递归过程,有回退过程;是一个针对图和树的遍历算法,早在19世纪就被用于解决迷宫问题。 测试点 输出结果字典序最大,且非递增序列输出 超时问题 话痨区 个人知识盲区,ac时间无把握 代码参考算法笔记,总感觉有点儿虚,后续只能多思考多训练弥补独立a题能力 测试用例 input: 169 5 2 output...

kngines 1148

1103. Integer Factorization (30)-PAT甲级真题 (剪枝)

给定目标数字n、组成数量k、次方数p,要求得到k个数字`a[1]...a[k]`满足`a[i] >= a[j](i < j)`且$n = a[1]^p + ... + a[k]^p$ 如果有tie,则取`sum = a[1] + ... + a[k]`最小值对应解,如果仍有tie,则取`vector ans`最小解。

hzj913313180的博客 135

PAT甲级 1103 Integer Factorization (DFS)

呜呜,写题的时候好困呐…。结果不是很难的题目硬是搞了这么久!qwq哎。睡醒后看了1小时p站DJ…流泪。国庆放假啥都没干,唯一坚持的事情就是疯狂熬夜。天天睡得超级晚…刘海那一块儿要秃啦…(哭) 注意 1.int型幂函数自己写一个,不要用double类型的pow()函数,存在误差导致结果错误 2.为了保证输出满足条件的所有情况中字典序最大的。我们选择从大往小的遍历 3.每个数可重复选择,则可以把所有可...

weixin_43727125的博客 246

PAT甲级1103 Integer Factorization(JAVA版)

本题考查 DFS,剪枝优化 思路 第一步,按照给定次数,将从1开始所有小于等于给定数字的数加入数组Vector,例如给定3次方,给定数字100,则数组Vector中有{1,8,27,64} 第二步,递归地从大到小将数组Vector中的数字加入临时数组temp中,因为元素可以重复,所以递归地下一层的指示数组Vector下标的索引不变,递归过程记录临时数组中的元素个数,并记录临时数组内元素的总和(便于...

R.I.P Kobe Bryant 292

PAT甲级 1103 Integer Factorization

给三个正整数N、K、P,将N表示成K个正整数(可以相同,递减排列)的P次方和,如果有多种方案,选择底数n1+…+nk最大的方案,如果还有多种方案,选择底数序列的字典序最大的方案

qq_45554473的博客 258
上一篇: 【算法模板】AVL树建树模板(没有删除操作)
下一篇: 爆刷PAT(甲级)——之【1101】 Quick Sort (25 分)——简单思维
仰天倀笑
博客等级 码龄10年 313粉丝 124原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值