PAT (Advanced Level) Practice - 1103 Integer Factorization(30 分)
发布日期:2021-06-30 23:43:30 浏览次数:3 分类:技术文章

本文共 955 字,大约阅读时间需要 3 分钟。

题目链接:

 

题目大意:略。

 

解题思路:先求出所有的 val^p,然后题目就转变成凑数问题(附:最大凑数的总和以及字典序)。

 

AC 代码

#include
#include
#define mem(a,b) memset(a,b,sizeof a)#define ssclr(ss) ss.clear(), ss.str("")#define INF 0x3f3f3f3f#define MOD 1000000007using namespace std;typedef long long ll;int n,k,p,ans;vector
v, rsv, tv;void dfs(int sum, int l, int isum, int idx){ if(sum==n && l==k && isum>ans) { ans=isum; rsv=tv; return; } for(int i=idx;i>=1;i--) { if(l+1>k || sum+v[i]*(k-l)
n) continue; // 剪枝2 tv[l]=i; dfs(sum+v[i],l+1,isum+i,i); // 剪枝3:最后一个是 i }}int main(){ ll val; int idx=0; scanf("%d%d%d",&n,&k,&p); tv.resize(k); while(idx<=n) { val=ll(pow(idx,p)+0.5); if(val>n) break; v.push_back(val); idx++; } dfs(0,0,0,idx-1); if(rsv.size()==0) puts("Impossible"); else { printf("%d = %lld^%d",n,rsv[0],p); for(int i=1;i

 

转载地址:https://lux-sun.blog.csdn.net/article/details/82216321 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:PAT (Advanced Level) Practice - 1095 Cars on Campus(30 分)
下一篇:PAT (Advanced Level) Practice - 1026 Table Tennis(30 分)

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月13日 09时15分40秒