c++-UVa1374快速幂运算迭代深搜法 ,C++初学者,求优化方法

问题描述

UVa1374快速幂运算迭代深搜法 ,C++初学者,求优化方法

这是我的代码,优化过几次,但是还是很慢很慢,求大神给优化途经,就是在我的代码的进行优化
#include
#include
#include
#include
using namespace std;
bool search(int,set&,int dep,int);
int MAX=1;
int tempMax;
int main()
{
sets;int n;
for(n=2;n!=1000;++n)
{
s.clear();s.insert(1);
size_t maxd=0;
int temp=n;//找出最小的maxd
while(temp!=0)
{
++maxd;
temp/=2;
}
for(;;maxd++)
{
MAX=1;
if(search(n,s,0,maxd))
{
cout<<n<<" "<<maxd<<endl;
break;
}
}
}
while(1);
}

bool search(int n,set&s,int dep,int maxd)
{
if(dep==maxd)
return false;
if(MAX*int(pow(2,maxd-dep-1))
return false;
for(set::reverse_iterator iter1=s.rbegin();iter1!=s.rend();++iter1)
for(set::reverse_iterator iter2=s.rbegin();iter2!=s.rend();++iter2)
{
tempMax=MAX;
int nn=*iter1,m=*iter2;
if(s.find(nn+m)==s.end())
{
if(nn+m==n)
return true;
s.insert(nn+m);
if(nn+m>MAX)
MAX=nn+m;
if(search(n,s,dep+1,maxd))
return true;
else s.erase(nn+m),MAX=tempMax;
}
if(nn>m&&s.find(nn-m)==s.end())
{
if(nn-m==n)
return true;
s.insert(nn-m);
if(search(n,s,dep+1,maxd))
return true;
else s.erase(nn-m);
}
if(nn<m&&s.find(m-nn)==s.end())
{
if(m-nn==n)
return true;
s.insert(m-nn);
if(search(n,s,dep+1,maxd))
return true;
else s.erase(m-nn);
}
}
return false;
}

解决方案

http://blog.csdn.net/helloworld10086/article/details/46944881

时间: 2024-11-08 19:10:22

c++-UVa1374快速幂运算迭代深搜法 ,C++初学者,求优化方法的相关文章

矩阵快速幂专题【完结】

第一题 hdu 1757 A Simple Math Problem 点击打开链接 思路:矩阵快速幂 分析: 1 最简单的矩阵快速幂的题目,直接利用矩阵求解即可 点击打开查看代码 第二题 hdu 1575 Tr A 点击打开hdu 1575 思路: 矩阵快速幂 分析: 1 题目给定一个n*n的矩阵要求矩阵的k次幂之后的矩阵的对角线的和 2 矩阵快速幂的裸题 点击打开查看代码 第三题 hdu 2604 Queuing 点击打开hdu 2604 思路: 递推+矩阵快速幂 分析; 1 根据题目的意思,

快速幂

1//整数的快速幂 m^n % k 的快速幂: long long quickpow(long long m , long long n , long long k){ long long ans = 1; while(n){ if(n&1)//如果n是奇数 ans = (ans * m) % k; n = n >> 1;//位运算"右移1类似除2" m = (m * m) % k; } return ans; } 矩阵快速幂 struct Matrix{ int

C++快速幂与大数取模算法示例_C 语言

一.快速幂 其实就是求(a^b)% p ,(其中a,b,p都比较大在int范围内)这类问题. 首先要知道取余的公式: (a*b)%p=(a%p*b%p)%p . 那么幂不就是乘机的累积吗,由此给出代码: int fast(int a,int b,int p) { long long a1=a,t=1; while(b>0) { if(b&1) /如果幂b是奇数多乘一次,因为后边会除2变偶数,(7/2=3) t=(t%p)*(a1%p)%p; a1=(a1%p)*(a1%p)%p; b/=2;

快速幂取模算法

所谓的快速幂,实际上是快速幂取模的缩写,简单的说,就是快速的求一个幂式的模(余).在程序设计过程中,经常要去求一些大数对于某个数的余数,为了得到更快.计算范围更大的算法,产生了快速幂取模算法.我们先从简单的例子入手:求abmodc 算法1.直接设计这个算法: int ans = 1; for(int i = 1;i<=b;i++) { ans = ans * a; } ans = ans % c; 缺点:这个算法存在着明显的问题,如果a和b过大,很容易就会溢出. 我们先来看看第一个改进方案:在讲

UVa 10229 Modular Fibonacci:矩阵快速幂求斐波那契

10229 - Modular Fibonacci Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=115&page=show_problem&problem=1170 The Fibonacci numbers (0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...) are defin

UVa 374 Big Mod:快速幂取模

374 - Big Mod Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=310 Calculate for large values of B, P, and M using an efficient algorithm. (That's right, t

设计-计算n位数为止的3的最大幂运算

问题描述 计算n位数为止的3的最大幂运算 对于一个正整数n(0<n<80),写一个输出n位数以内最大的3的幂运算例 输入1输出9 输入2输出81 输入6输出531441 输入60输出436673502879206784130402698570834024654748577491697818855443 以下是我自己写的程序 #include<stdio.h>#include<string.h>int main(void){ int insum=1; char m[999

超时-一道关于大数幂运算的题目,c语言实现

问题描述 一道关于大数幂运算的题目,c语言实现 题目描述 幂运算是常见的数学运算之一,其原理是用同一个数相乘多次,但是有的时候当幂指数特别大的时候,这样的运算就太浪费时间.请大家学会在幂中加特技,让幂运算的效率提高到可以接受的程度.输入: 第一个行一个整数T,表示有T组数据 每组数据,输入x,y 求x的y次幂 (2≤ x ,y≤10^9)输出: 每组数据输出一个整数,表示幂运算对1000000007取模后的结果样例输入: 2 2 4 2 100000000样例输出: 16 494499948 我

acm-邻接矩阵能进行深搜么。现在会邻接表的深搜,还用把邻接矩阵转化为邻接表吗

问题描述 邻接矩阵能进行深搜么.现在会邻接表的深搜,还用把邻接矩阵转化为邻接表吗 邻接矩阵如果能进行的话.麻烦大神给点代码啊.小白..如题...... 解决方案 void dfs(int i){ visited[i]=1; for(int j=0;j<n;j++){ if(G[i][j]==1&&visited[j]==0){ dfs(j); } } } 解决方案二: 这是用邻接矩阵求最小生成树的,题主看下能否帮的上忙,如果能帮的上,希望可以采纳 #include #include