PAT A1103—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 input file contains one test case which gives in a line the three positive integers N (≤400), K (≤N) and P (1<P≤7). The numbers in a line are separated by a space.
Output Specification:
For each case, if the solution exists, output in the format:
N = n[1]^P + ... n[K]^P
where n[i] (i = 1, ..., K) is the i-th factor. All the factors must be printed in non-increasing order.
Note: the solution may not be unique. For example, the 5-2 factorization of 169 has 9 solutions, such as 122+42+22+22+12, or 112+62+22+22+22, or more. You must output the one with the maximum sum of the factors. If there is a tie, the largest factor sequence must be chosen -- sequence { a1,a2,⋯,aK } is said to be larger than { b1,b2,⋯,bK } if there exists 1≤L≤K such that ai=bi for i<L and aL>bL.
If there is no solution, simple output Impossible.
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
题意:给定正整数N,K,P,将N表示成K个正整数(可以相同,递减排列)的P次方的和,即N=n1^p+...+nk^p。如果有多种方案,那么选择底数和n1+...+nk最大的方案:如果还有多种方案,那么选择底数序列的字典序最大的方案。
1 #include<cstdio>
2 #include<vector>
3 #include<algorithm>
4 using namespace std;
5 int n,k,p,maxFacSum = -1; //n,k,p如题所诉,maxFacSum记录最大底数之和
6 vector<int> fac,ans,temp; //fac记录0^p,1^p...i^p,ans存放最优底数序列,temp存放递归中的临时底数序列
7
8 int power(int x) { //power函数计算x^p
9 int ans = 1;
10 for(int i=0; i<p; i++){
11 ans *= x;
12 }
13 return ans;
14 }
15
16 void init() {
17 int i=0, temp=0;
18 while(temp <= n) { //当i^p没有超过n时,不断把i^p加入fac
19 fac.push_back(temp);
20 temp = power(++i);
21 }
22 }
23
24 //DFS函数,当前访问fac[index],nowK为当前选中个数
25 //sum为当前选中的数之和,facSum为当前选中的底数之和
26 void DFS(int index, int nowK, int sum, int facSum) {
27 if(sum == n && nowK == k) { //找到一个满足的序列
28 if(facSum > maxFacSum) { //底数之和更优
29 ans = temp; //更新最优底数序列
30 maxFacSum = facSum; //更新最大底数之和
31 }
32 return;
33 }
34 if(sum > n || nowK > k) return; //这种情况下不会产生答案,直接返回
35 if(index - 1 >= 0) { //fac[0]不需要选择
36 temp.push_back(index); //把底数index加入临时序列temp
37 DFS(index, nowK+1, sum+fac[index], facSum+index); //"选"的分支
38 temp.pop_back(); //"选"的分支结束后把刚加进去的数pop掉
39 DFS(index-1, nowK, sum, facSum); //"不选"的分支
40 }
41 }
42
43 int main() {
44 scanf("%d%d%d",&n,&k,&p);
45 init(); //初始化fac数组
46 DFS(fac.size()-1,0,0,0); //从fac的最后一位开始往前搜索
47 if(maxFacSum == -1) printf("Impossible\n");
48 else {
49 printf("%d = %d^%d",n,ans[0],p); //输出ans的结果
50 for(int i=1 ; i<ans.size(); i++) {
51 printf(" + %d^%d", ans[i],p);
52 }
53 }
54 return 0;
55 }
PAT A1103—DFS的更多相关文章
- PAT A1103
PAT A1103 标签(空格分隔): PAT 解题思路: DFS #include <cstdio> #include <vector> using namespace st ...
- PAT A1103 Integer Factorization (30 分)——dfs,递归
The K−P factorization of a positive integer N is to write N as the sum of the P-th power of K positi ...
- PAT A1103 Integer Factorization
线性dfs,注意每次深搜完状态的维护~ #include<bits/stdc++.h> using namespace std; ; vector<int> v,tmp,pat ...
- 简述BFS与DFS
简述BFS与DFS 最近学习了数据结构课程以及应对蓝桥杯备考,所以花费了一点时间将比较重要的两个搜索BFS(宽度优先搜索)和DFS(深度优先搜索)大致思路以及代码整理出来,如有错误,还请各位大佬批评改 ...
- PAT_A1103#Integer Factorization
Source: PAT A1103 Integer Factorization (30 分) Description: The K−P factorization of a positive inte ...
- Bubble Cup 8 finals C. Party (575C)
题意: 给定n个人,分两天晚上去夜总会开派对,要求每天恰好有n/2个人去,且每人去的夜总会各不相同. 每个人对不同的晚上不同的夜总会有不同的满意度,求一个方案使得所有人的满意度之和最大. 夜总会数量= ...
- codechef: BINARY, Binary Movements
非常有毛病的一道题,我一个一个读字符死活过不去,改成整行整行读就 A 了... 做法就是...最小点覆盖... 我们发现可以把一个点向上跳看做被吃掉了,然后最顶层的点是无法向上跳所以不能被吃掉,然后被 ...
- hihoCoder-1829 2018亚洲区预选赛北京赛站网络赛 B.Tomb Raider 暴力 字符串
题面 题意:给你n个串,每个串都可以选择它的一个长度为n的环形子串(比如abcdf的就有abcdf,bcdfa,cdfab,dfabc,fabcd),求这个n个串的这些子串的最长公共子序列(每个串按顺 ...
- CSP-S全国模拟赛第二场 【nan】
A.count 本场比赛最难的题... 隔板法组合数容斥 xjb 搞搞就好了 //by Judge #include<cstdio> #include<iostream> #d ...
随机推荐
- Java语言程序设计与数据结构(基础篇)第七章答案
答案为本人求解,如有错误,还望海涵.如有雷同,纯属巧合. 7.1 import java.util.Scanner; public class Main { public static void ma ...
- java语言程序设计与数据结构(基础篇)第二章答案
答案为本人自己求解,若有错误,还望海涵并及时告知.如有雷同,纯属巧合. 2.1 import java.util.Scanner; public class Welcome { public stat ...
- 洛谷3203 弹飞绵羊(LCT)
据说这个题当年的正解是分块qwq 根据题目所说,对于题目中的弹力系数,就相当于一条边,那么对于"跳出去"这个限制,我们可以选择建造一个新点\(n+1\)表示结束,那么每次,求一个点 ...
- 项目问题记录------Mabatis动态sql语句
现在在做一个模糊查询功能,使用两个查询条件: 条件1:下拉框选择的产品名 条件2:输入框输入的用户名 需求1:下拉框的选项是从数据库里导出来的产品名,此外,添加一个选项"全部产品" ...
- 如何在印刷品中使用遵循SIL Open Font License协议的字体
如何在印刷品中使用遵循SIL Open Font License协议的字体 昨天在知乎看到了一个问题,( 如何在设计中声明字体开源许可证? - 知乎 (zhihu.com),恰好最近在研究一些开源协议 ...
- 什么,你还使用 webpack?别人都在用 vite 搭建项目了
一.vite 到底是干嘛的? vite 实际上就是一个面向现代浏览器,基于 ES module 实现了一个更轻快的项目构建打包工具. vite 是法语中轻快的意思. vite 的特点: 1.轻快的冷服 ...
- UltraSoft - Beta - Scrum Meeting 12
Date: May 28th, 2020. Scrum 情况汇报 进度情况 组员 负责 今日进度 q2l PM.后端 会议记录修复了课程中心导入作业时出现重复的问题完成了消息中心界面的交互 Liuzh ...
- [no code][scrum meeting] Beta 7
$( "#cnblogs_post_body" ).catalog() 例会时间:5月21日15:30,主持者:彭毛小民 下次例会时间:5月22日15:30,主持者:赵涛 昨日为5 ...
- BUAA 2020 软件工程 结对项目作业
Author: 17373051 郭骏 3.28添加:4.计算模块接口的设计与实现过程部分,PairCore实现的细节 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) ...
- 用建造者模式实现一个防SQL注入的ORM框架
本文节选自<设计模式就该这样学> 1 建造者模式的链式写法 以构建一门课程为例,一个完整的课程由PPT课件.回放视频.课堂笔记.课后作业组成,但是这些内容的设置顺序可以随意调整,我们用建造 ...