当前位置: 首页 > 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大模型
  • 来论|这无非就是一只“纸老虎”:评特朗普政府“关税战”
  • 杨荫凯已任浙江省委常委、组织部部长
  • “雷公”起诉人贩子王浩文案开庭:庭审前手写道歉信,庭审中不承认拐走川川
  • 上海五五购物节首次推出商圈精品推广节,9个商圈近百个商场参与促销
  • 上海楼市明显复苏:一季度房地产开发投资增长5.1%,土地市场重燃战火
  • 阿联酋首个AI博士项目设立,助力人才培养与科技转型