LA3621(dfs)
来源:互联网 发布:剑三捏脸数据 成女 编辑:程序博客网 时间:2024/06/05 12:09
题目大意:
已知n,求x最少经过多少次的乘除法可以使得达到x ^n
思路:
因为可以乘除,所以要进行回溯
dfs
用一个num表示当前步数
用step表示最多多少步
代码:
#include <iostream>using namespace std;#include <cstring>#include <algorithm>#include <stdio.h>const int MAXN = 1010;const int INF = 0x3f3f3f3f;int arr[MAXN],num;int dfs(int n,int step) { if(num > step) return 0; if(arr[num] == n) return 1; if(arr[num] << (step - num) < n) return 0; for(int i = 0; i <= num; i++) { num++; arr[num] = arr[num - 1] + arr[i]; if(arr[num] <= 10000 && dfs(n,step)) return 1; arr[num] = arr[num - 1] - arr[i]; if(arr[num] > 0 && dfs(n,step)) return 1; num--; } return 0;}int main() { int n; while(scanf("%d",&n) != EOF && n) { int i; for(i = 0;;i++) { arr[num = 0] = 1; if(dfs(n,i)) break; } printf("%d\n",i); } return 0;}
0 0
- LA3621(dfs)
- DFS
- DFS
- dfs
- dfs
- dfs
- dfs
- DFS
- DFS
- dfs
- DFS
- DFS
- DFS
- dfs
- DFS
- dfs
- dfs
- dfs
- E - Help Hanzo(LightOJ 1197)
- KMP算法
- 数据清洗经验
- Java集合&List的实现
- MySQL学习(四)
- LA3621(dfs)
- PAT 乙级真题 1005. 继续(3n+1)猜想
- SpringMVC+Shiro权限管理
- (Leetcode 147)Insertion Sort List
- Java对象存储地址
- Java模拟Post请求
- Codeforces Round #345 (Div. 1) E Clockwork Bomb
- R类
- 五。设计模式(原型模式)