UVALive 3621 Power Calculus n次幂最少需要几次乘除得到 搜索
2015-01-22 21:49
423 查看
题目链接:点击打开链接
题意:
输入一个n(n<=1000)
问:有一个x,最少需要几次乘除可以算出x^n。
思路:
记忆化搜索
a[i] = j 表示i次幂需要j步得到
题意:
输入一个n(n<=1000)
问:有一个x,最少需要几次乘除可以算出x^n。
思路:
记忆化搜索
a[i] = j 表示i次幂需要j步得到
import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.LinkedList; import java.util.PriorityQueue; import java.util.Scanner; import java.util.TreeSet; import java.util.Queue; public class Main { static int N = 1000050; int[] a = new int ; boolean dfs(int n, int num, int step){//用step步是否能得到n次,当前步数为num步 if(num > step)return false; if(a[num] == n)return true; if((a[num] << (step-num)) < n)//一直平方也达不到n return false; for(int i = 0; i <= num; i++){ a[num+1] = a[num]+a[i]; if(a[num+1] <= 10000 && dfs(n,num+1,step)) return true; a[num+1] = a[num] - a[i]; if(a[num+1] > 0 && dfs(n,num+1, step)) return true; } return false; } void work() { while(true){ int n = cin.nextInt(); if(n == 0)break; int i; for(i = 0; ; i++){ a[0] = 1; if(dfs(n, 0, i))break; } out.println(i); } } Main() { cin = new Scanner(System.in); out = new PrintWriter(System.out); } public static void main(String[] args) { Main e = new Main(); e.work(); out.close(); } public Scanner cin; public static PrintWriter out; }
相关文章推荐
- UVALive - 3621 Power Calculus
- Power Calculus UVA - 1374 迭代加深搜索
- UVA UVA - 1374 Power Calculus 快速幂计算(迭代加深搜索)
- LA 3621 / POJ 3134 Power Calculus (迭代加深搜索)
- UVA 1374 ——Power Calculus(IDA*搜索)
- UVA-1374 Power Calculus (迭代加深搜索)
- UVa 1374 - Power Calculus ( IDA* - 迭代加深搜索 )
- UVa 1374 - Power Calculus——[迭代加深搜索、快速幂]
- UVALive 5107 dfs暴力搜索
- poj 3134 && LA 3621 Power Calculus (迭代加深深度优先搜索)
- UVA - 1374 - Power Calculus(迭代加深)
- UVa 1374 - Power Calculus(IDA*)
- UVALive 3942 (LA 3492) Remember the Word Trie树 + 记忆化搜索
- 对一个正整数n,算得到1需要的最少操作次数
- UVALive 5844 dfs暴力搜索
- Uva1374 Power Calculus(快速幂计算)【IDA*】【例题7-13】
- 例题1.8 彩色立方体 Colored Cubes UVALive - 3401 暴力打表+暴力搜索+贪心
- UVA 1374 Power Calculus(IDA*)
- UVA 1374 Power Calculus
- 实现一个函数,对一个正整数n,算得到1需要的最少操作次数: