**浙大PAT甲级 1103 dfs+快速幂
来源:互联网 发布:可信的网络兼职 编辑:程序博客网 时间:2024/06/06 00:42
题目的意思是求一个数n=k个数的p次方之和。
对n进行深度优先搜索,按照递减的顺序进行搜索,并计算sum的值,如果sum的值比maxxx大,则更新vector,并用ans来统计结果次数,如果为0,那么输出impossible。
还用了快速幂来求解数的P次方。
AC代码:
#include<iostream>#include<map>#include<cstdio>#include<algorithm>#include<queue>#include<cstring>#include<set>#include<stack>#include<cmath>#include<vector>#include<hash_map>#define ll long long#define inf 24*60*60using namespace std;int n;int k,p;int maxxx=0;int ans=0;vector<int> v;vector<int> v1;int pow1(int x,int n){ int ans=1,tmp=x; while(n) { if(n&1) { ans*=tmp; } tmp*=tmp; n>>=1; } return ans;}void dfs(int x,int ci,int maxx,int sum){ if(x==0&&ci<k) { return; } if(x<0) { return; } if(ci==k) { if(x==0) { ans++; if(sum>maxxx) { maxxx=sum; v1=v; } } return; } else { for(int i=maxx;i>=1;i--) { v.push_back(i); dfs(x-pow1(i,p),ci+1,i,sum+i); v.pop_back(); } }}int main(){ scanf("%d %d %d",&n,&k,&p); dfs(n,0,(int)pow(n+1,1.0/p),0); if(ans==0) { printf("Impossible"); return 0; } printf("%d = ",n); for(int i=0;i<v1.size();i++) { if(i==0) printf("%d^%d",v1[i],p); else { printf(" + %d^%d",v1[i],p); } }}
0 0
- **浙大PAT甲级 1103 dfs+快速幂
- *浙大PAT甲级 1087 dijkstra+dfs
- 浙大pat甲级 1023
- 浙大pat甲级 1024
- 浙大pat甲级 1025
- 浙大PAT甲级 1026
- 浙大PAT甲级 1028
- 浙大PAT甲级 1029
- 浙大PAT甲级 1030
- 浙大PAT甲级 1031
- 浙大PAT甲级 1032
- 浙大PAT甲级 1033
- 浙大PAT甲级 1035
- 浙大PAT甲级 1037
- 浙大PAT甲级 1039
- 浙大PAT甲级 1040
- 浙大PAT甲级 1038
- 浙大PAT甲级 1041
- Elasticsearch的查询器query与过滤器filter的区别
- apache开启https
- Android中关于定制Toast使用总结
- 抓包工具的使用
- Struts2 16个内置验证器
- **浙大PAT甲级 1103 dfs+快速幂
- strcpy函数的用法
- Android studio 生成apk的位置
- Ubuntu Firefox Flash 插件安装
- Shell 正则表达式
- eclipse maven 导出项目依赖的jar包
- wireshark ts流分析--简明步骤
- C++——算法基础之动态查找表2——平衡二叉树(插入)
- leetcode No131. Palindrome Partitioning