题意:输入正整数n(1<=n<=1000),问最少需要几次乘除法可以从x得到x的n次方,计算过程中x的指数要求是正的。

题解:这道题,他的结果是由1经过n次加减得到的,所以最先想到的就是暴力回溯,其中的剪枝函数,首先不能得到重复的数,其次深度有上限,上限是n-1,还有,如果当前序列的最大数乘以2的(dep-cnt)(dep与cnt分别表示深度上限和当前深度)次方小于n,则剪枝。但是这样的时间复杂度还是特别高,所以又想到了另外的方法,就是先列出深度,然后找在这个深度里是否存在一个方法得到n

代码:

 #include<math.h>
#include<vector>
#include<string.h>
#include<stdio.h>
#include<iostream>
using namespace std;
const int maxn=;
int n,minn,dep;
int ans[maxn]; bool dfs(int num,int cnt){
if(cnt==dep){
if(num==n)
return ;
return ;
}
if(num*(<<(dep-cnt))<n) return ;
for(int i=cnt;i>=;i--){
ans[cnt+]=ans[i]+num;
if(dfs(ans[i]+num,cnt+)){
return ;
}
if(ans[i]<num){
ans[cnt+]=num-ans[i];
if(dfs(num-ans[i],cnt+)){
return ;
}
}
else if(ans[i]<num){
ans[cnt+]=ans[i]-num;
if(dfs((ans[i])-num,cnt+))
return ;
}
}
return ;
} //bool dfs(int num,int cnt){
// if(num==n){
// return 1;
// }
// if(cnt==dep){
// return 0;
// }
// if(num*(1<<dep-cnt)<n) return 0;
// for(int i=0;i<=cnt;i++){
// for(int j=1;j<=2;j++){
// if(j==1){
// ans[cnt+1]=num+ans[i];
// if(dfs(num+ans[i],cnt+1)){return 1;}
// }
// else{
// ans[cnt+1]=num-ans[i];
// if(num-ans[i]<0) continue;
// if(dfs(num-ans[i],cnt+1)) return 1;
// }
// }
// }
// return 0;
//} int main(){
//freopen("in.txt","r",stdin);
while(scanf("%d",&n)&&n){
minn=;
memset(ans,,sizeof(ans));
ans[]=;
for(dep=;dep<=;dep++){
if(dfs(,))
break;
}
printf("%d\n",dep);
}
}

      

最新文章

  1. C语言的文法分析
  2. effetive C++ 02 尽量以const,enum,inline替换#define
  3. mysql的sql_mode 模式修改 my.cnf
  4. 树状数组POJ2352星星
  5. 430单片机之定时器A功能的大致介绍
  6. Java HashMap 源码解析
  7. 使用libsvm对MNIST数据集进行实验
  8. Entity Framework 的枚举类型
  9. IE标签a嵌套table标签,链接点击无效
  10. CodeForces 705C Thor
  11. BOM—浏览器对象模型(Browser Object Model)
  12. resful
  13. HDU 5583 Kingdom of Black and White(暴力)
  14. Linux:服务器/客户端API调用错误检查
  15. ROW_NUMBER() OVER(PARTITION BY ORDER BY )RN 只选一行
  16. CentOS 查看是否安装软件包
  17. 用 IIS 搭建 mercurial server
  18. Intellij IDEA Scala开发环境搭建
  19. [转][Java]Jsp入门
  20. Problem-1000:A + B Problem

热门文章

  1. Android 开发笔记___复选框__checkbox
  2. [MYSQL] 记一次MySQL性能调优
  3. Pycharm,Python原生IDE?
  4. w3wp.exe已附加有调试器,但没有该调试器配置为调试此未经处理的异常,若要调试此异常,必须分离当前的调试器。
  5. 如何部署Java_web项目到云服务器上
  6. 用python模拟登录(解析cookie + 解析html + 表单提交 + 验证码识别 + excel读写 + 发送邮件)
  7. c#基础知识索引器
  8. CentOS7.x系统根目录分区扩容
  9. R语言高性能编程(二)
  10. 什么是Node.js?带你初识Node