当前位置: 首页 > news >正文

PAT甲级 1103 Integer Factorization

原题链接

https://pintia.cn/problem-sets/994805342720868352/exam/problems/type/7?problemSetProblemId=994805364711604224&page=1


题目大意

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

解题思路

先把i从0开始所有i的p次方的值存储在v[i]中(v[i] <= n)。然后用DFS找方案,注意剪枝,详细见代码。


代码(CPP)

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
#define endl "\n"
const int maxn = 1e3 + 10;
const ll INF = 0x3f3f3f3f3f3f3fLL;
vector<int> nums;
vector<int> tmpAns, ans;
int n, k, p;

void init() {
    int temp = 0, index = 1;
    while (temp <= n) {
        nums.push_back(temp);
        temp = pow(index, p);
        index++;
    }
}

int MaxFacSum = -1;
void dfs(int index, int curSum, int curK, int facSum) {
    if (curK == k) {
        if (curSum == n && facSum > MaxFacSum) {
            ans = tmpAns;
            MaxFacSum = facSum;
        }
        return;
    }
    if (index == 0) {
        return;
    }
    for (int i = index; i >= 1; i--) {
        if (curSum + nums[i] <= n) {    // 剪枝,如果此时所选数的和已经超过了n,则没必要继续下探搜索了
            tmpAns[curK] = i;
            dfs(i, curSum + nums[i], curK + 1, facSum + i);
        }
    }
}

void solve() {
    cin >> n >> k >> p;
    tmpAns.resize(k);
    init();
    dfs(nums.size() - 1, 0, 0, 0);
    if (MaxFacSum == -1) {
        cout << "Impossible\n";
        return;
    }
    cout << n << " = ";
    for (int i = 0; i < ans.size(); i++) {
        if (i != 0)
            cout << " + ";
        cout << ans[i] << "^" << p;
    }
}

int main() {
    // freopen("in.txt", "r", stdin);
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cout << fixed;
    cout.precision(18);

    solve();
    return 0;
}

相关文章:

  • Docker安装Mysql
  • C语言图结构学习笔记
  • JavaScript函数-函数的返回值
  • 计算机网络之路由协议(自治系统)
  • AI学习之-阿里天池
  • jmeter后端监视器的妙用和实现方法
  • Progress bar (进度条)
  • 谷歌浏览器安装Vue3插件
  • 亲测Win11电脑可以安装LabVIEW的版本,及2015、2018、2020版本直接的区别
  • Google第三方库详解------ProtoBuf详解 + 样例(5万字详解!)
  • C#实现Modbus TCP 通讯测试软件
  • vue passive 修饰符使用场景
  • Python中的转义字符
  • MongoDB#常用脚本
  • Vulhub靶机 Apache Druid(CVE-2021-25646)(渗透测试详解)
  • 基于keepalived的Nginx高可用架构
  • 游戏引擎学习第119天
  • 【前端进阶】05 单线程的JavaScript如何管理任务的
  • Baklib企业CMS智能元数据与协作管理实践
  • 超级详细Spring AI运用Ollama大模型
  • 48岁黄世芳履新中国驻毛里求斯大使,曾在广西工作多年
  • 贵州黔西市游船倾覆事故致9人死亡1人失联
  • 央广网评政府食堂打开大门:小城文旅爆火的底层密码就是真诚
  • “矿茅”国际化才刚开始?紫金矿业拟分拆境外黄金矿山资产于港交所上市
  • 云南省政协原党组成员、秘书长车志敏接受审查调查
  • 华尔兹转岗与鲁比奥集权:特朗普政府人事震荡背后的深层危机